3
respostas

Erro group by

Estou usando a versão 8 do mysql e agora a opção only_full_group_by é ativa por padrão. Primeiro eu pensei que teria que colocar o concat inteiro na clausula group by, mas vi que se der um alias funciona +-.

A query abaixo roda sem problemas, mas se coloco o sum(quantidade * preco) já não rola.

To fazendo cagada ou o problema é o mysql?

SELECT concat('O cliente ',c.nome,' faturou ','no ano de ',year(data_venda)) sentenca FROM tabela_de_clientes c INNER JOIN notas_fiscais n ON n.CPF = c.CPF INNER JOIN itens_notas_fiscais i ON i.numero = n.numero WHERE YEAR(data_venda) = 2016 group by sentenca;

3 respostas

Fala Franklin, tudo bom?

Tente rodar o código dessa forma:

SELECT concat('O cliente ',c.nome,' faturou ','no ano de ',year(data_venda)) sentenca,
sum(quantidade * preco) 

FROM tabela_de_clientes c 
INNER JOIN notas_fiscais n ON n.CPF = c.CPF 
INNER JOIN itens_notas_fiscais i ON i.numero = n.numero 

WHERE YEAR(data_venda) = 2016 group by sentenca;

Pode ser que você não tenha colocado a vírgula depois de 'sentenca' e o MySQL retornou o erro.

Qualquer dúvida é só falar, tá bom?

Oi Maria, esse funciona, mas no exercício ele pede para agregar por quantidade * preco e aí é que entra o problema. Não poderia usar o alias pois o resultado não seria o esperado e quando tento pela data que seria o certo também não rola

SELECT concat('O cliente ',c.nome,' faturou ',round(sum(quantidade*preco),2),'no ano de ',year(data_venda)) sentenca,
sum(quantidade * preco) 

FROM tabela_de_clientes c 
INNER JOIN notas_fiscais n ON n.CPF = c.CPF 
INNER JOIN itens_notas_fiscais i ON i.numero = n.numero 

WHERE YEAR(data_venda) = 2016 group by year(data_venda);

O select acima deveria rodar

Oi Franklin,

O primeiro Select que você mandou e eu ajustei, retorna o que foi proposto no exercício.

Nesse último que mandou, você pode fazer alguns ajustes: tirar o ROUND e colocar um CAST e no GROUP BY, pode agrupar pelo nome também. Se tentar agrupar com o alias, vai retornar um erro.

SELECT concat('O cliente ',c.nome,' faturou ',cast(sum(i.quantidade*i.preco) as char(20)),' no ano de ',year(n.data_venda)) sentenca

FROM tabela_de_clientes c 

INNER JOIN notas_fiscais n ON n.CPF = c.CPF 
INNER JOIN itens_notas_fiscais i ON i.numero = n.numero 

WHERE YEAR(n.data_venda) = 2016

 group by c.nome, year(n.data_venda);

Qualquer dúvida é só falar :)