Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida

Olá,

estou tentando realizar a consulta dos clientes que fizeram mais de 2000 compras em 2016, adicionando o nome do cliente que está na tbcliente. Elaborei o seguinte select:

select 
    tbcliente.nome, 
    tbcliente.cpf, 
    notas_fiscais.data_venda, 
    count(notas_fiscais.cpf) as total_compras
from 
    tbcliente 
join 
    notas_fiscais on notas_fiscais.cpf = tbcliente.cpf
group by 
    tbcliente.nome, 
    tbcliente.cpf,
    notas_fiscais.data_venda
having 
    count(notas_fiscais.cpf) > 2000 
    and year(notas_fiscais.data_venda) = 2016
order by 
    tbcliente.nome;

O problema é que a consultar me retorna 0 registros. Como posso fazer esta consulta com join da tbcliente?

2 respostas
solução!

Oi Kael,

O problema na sua consulta é que você está agrupando os resultados por data_venda, o que faz com que o COUNT(notas_fiscais.cpf) seja contado por cada data de venda de cada cliente e não o total de compras do cliente em 2016. Além disso, a condição HAVING está sendo aplicada em cada agrupamento individual, e não no total do cliente.

Para corrigir isso, você precisa remover o notas_fiscais.data_venda do GROUP BY e utilizar a função YEAR() na cláusula WHERE para filtrar as vendas de 2016 antes do agrupamento. O HAVING deve então ser aplicado sobre o total de compras por cliente.

Segue a consulta corrigida:

SELECT 
    tbcliente.nome,
    tbcliente.cpf,
    COUNT(notas_fiscais.cpf) AS total_compras
FROM 
    tbcliente
JOIN 
    notas_fiscais ON notas_fiscais.cpf = tbcliente.cpf
WHERE
    YEAR(notas_fiscais.data_venda) = 2016
GROUP BY 
    tbcliente.nome,
    tbcliente.cpf
HAVING 
    COUNT(notas_fiscais.cpf) > 2000
ORDER BY 
    tbcliente.nome;

Nesta versão, primeiro filtramos as notas fiscais de 2016, depois agrupamos por cliente e então contamos o número de compras por cliente, aplicando o filtro HAVING para selecionar apenas os clientes com mais de 2000 compras.

tux matrix    Caso este post o tenha ajudado, por favor, marcar como solucionado ☑️. Bons Estudos! 🤓

Perfeito! Compreendi.

Agora sim:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Gratidão!!!