ATENÇÃO! Para resolver a questão, considere as tabelas cliente e visita, conforme as instâncias exibidas a seguir.
cliente
codigo |
310 |
312 |
314 |
316 |
Visitas
codigo | data |
310 |
2022/03/01 |
312 |
2022/03/01 |
312 |
2022/03/10 |
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):