1
resposta

Não consigo entender a resposta deste exercício

Questão:

Quais são os clientes que fizeram mais de 2000 compras em 2016?

SELECT CPF, COUNT(*) FROM [NOTAS FISCAIS] 
WHERE YEAR(DATA) = 2016 
GROUP BY CPF 
HAVING COUNT(*) > 2000
1 resposta

Opa, tudo bem?

Teria algo mais específico que provocou a essa dificuldade?

Sempre que tenho alguma dificuldade pra entender um código ouu pra resolver um bug/problema, utilizo uma ideia próxima do "Debug com Pato de Borracha": visualizando passo a passo e buscando explicar cada linha ou bloco a partir da sua função e sentido ali, começando do começo. Podemos aplicar nessa situação também.

• Os pontos chaves dessa questão estão nas condições e no agrupamento.

A tabela "[NOTAS FISCAIS]" apresenta todas as NFs emitidas por extenso. Por exemplo:

CPF_do_cliente1 00001
CPF_do_cliente2 00002
CPF_do_cliente1 00003
CPF_do_cliente3 00004
CPF_do_cliente1 00005

Nesse caso, se quiséssemos saber quanto cada um desses clientes comprou, deveríamos olhar o "CPF_do_cliente" e contar quantas vezes ele se repete. Teremos:

CPF_do_cliente1 se repete 3 vezes; CPF_do_cliente2 se repete 1 vez; CPF_do_cliente3 se repete 1 vez.

Com essa contagem, tem-se a quantidade de compras. Nessa mesma ideia, foi feita a contagem de vezes que os CPFs da tabela se repetiram usando a função COUNT() -- que tem a função de contar a quantidade de dados.

Essa função geralmente é usada com a agregação "GROUP BY", que separa todas as linhas a partir das informações diferentes. No caso de "GROUP BY CPF", são separadas as linhas que tem CPFs diferentes. Quando usada a função de contagem "COUNT()", ele não só vai *separar os diferentes** como também vai contar quantas vezes os diferentes apareceram na tabela.

Para especificar quais dados precisam ser contados, foram usadas as condições:

• WHERE YEAR(DATA) = 2016
-- Só mostrar as linhas cujo ano da coluna "DATA" seja igual a 2016;
• HAVING COUNT(*) > 2000
-- Depois de feita a contagem, deve-se só mostrar as linhas cujas as quantidades sejam  maiores que 2000.

Essas informações lhe ajudam um pouco? Se não, comente, provável que alguém aqui do fórum pode lhe ajudar. :P