1
resposta

[Projeto] 14 - Listando expressão natural (SOLUÇÃO + ERRO 1055)

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.

1 resposta

Oi, Sarah! Tudo bem?

Obrigada por compartilhar com o fórum a sua resolução do exercício e também a solução para o erro 1055! Ele acontece quando tentamos realizar, por exemplo, uma consulta em que nem todas as colunas indicadas no SELECT estão sendo utilizadas na etapa de agregação (isto é, no GROUP BY).

Continue focada nos estudos e, se surgir alguma dúvida, fico à disposição!

Abraços, Sarah!