///
ATENÇÃO! Para resolver as duas próximas questões, considere as tabelas cliente e visita, conforme as instâncias exibidas a seguir.
| cliente | visita | |
|---|---|---|
| codigo | codigo | data |
| 310 | 310 | 2022/03/01 |
| 312 | 312 | 2022/03/01 |
| 314 | 312 | 2022/03/10 |
| 316 | 310 | 2022/03/11 |
| 314 | 2022/03/11 | |
| 312 | 2022/03/11 | |
| 312 | 2022/03/11 | |
| 314 | 2022/04/05 | |
| 312 | 2022/04/07 |
João deve produzir um relatório que mostra o número de visitas ao site da empresa de cada cliente a cada mês. Mesmo os clientes que não visitaram o site devem ser contabilizados.
O conteúdo do relatório, de acordo com as instâncias das tabelas cliente e visita, descritas anteriormente, é exibido a seguir.
| codigo | mês | visitas |
|---|---|---|
| 310 | 3 | 2 |
| 310 | 4 | 0 |
| 312 | 3 | 3 |
| 312 | 4 | 1 |
| 314 | 3 | 1 |
| 314 | 4 | 1 |
| 316 | 3 | 0 |
| 316 | 4 | 0 |
João considerou três scripts SQL para produzir esse relatório.
I. select c.codigo cliente, month(v.data) mês, count(distinct v.data) frequencia from cliente c LEFT JOIN visita v on c.codigo = v.codigo group by c.codigo, month(data) order by 1,2
II. select c.codigo cliente, month(v.data) mês, count(distinct v.data) frequencia from cliente c INNER JOIN visita v on c.codigo = v.codigo group by c.codigo, month(data) UNION select distinct c.codigo cliente, month(v.data) mês, 0 frequencia from cliente c, visita v where not exists (select * from visita v2 where v2.codigo=c.codigo and month(v2.data)=month(v.data)) order by 1,2
III. select c.codigo, m.mês, (select count(distinct v.data) from visita v where month(v.data) = m.mês and v.codigo = c.codigo) frequencia from (select distinct month(data) mês from visita) m, (select distinct codigo from cliente) c order by 1, 2
Produz(em) o resultado corretamente somente o(s) script(s):