Queremos construir um SQL cujo resultado seja, para cada cliente: “O cliente João da Silva faturou 120000 no ano de 2016”. Somente para o ano de 2016.
Solução sem o uso do CAST:
SELECT CONCAT('O cliente ', A.NOME,
' faturou R$', FLOOR(SUM(B.PRECO * B.QUANTIDADE)),
' no ano de ', YEAR(C.DATA_VENDA)) AS RESULTADO
FROM TABELA_DE_CLIENTES A
JOIN NOTAS_FISCAIS C ON A.CPF = C.CPF
JOIN ITENS_NOTAS_FISCAIS B ON C.NUMERO = B.NUMERO
WHERE YEAR(C.DATA_VENDA) = 2016
GROUP BY A.NOME ORDER BY A.NOME LIMIT 3;
Output:
RESULTADO |
---|
O cliente Abel Silva faturou R$3111017 no ano de 2016 |
O cliente Carlos Eduardo faturou R$2827179 no ano de 2016 |
O cliente César Teixeira faturou R$2971776 no ano de 2016 |
Existe um erro atrelado ao código quando tenta-se rodar o código fornecido do professor:
- Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'sucosvendas.C.DATAVENDA' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sqlmode=onlyfullgroupby
Para corrigir, desative o ONLY_FULL_GROUP_BY do MySQL:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Logo em seguida clique em RECONNECT TO DBMS no menu. Dica sugerida no fórum Disable ONLY_FULL_GROUP_BY.