1
resposta

[Bug] Erro comando.

Não sei se pode ser diferentes versoes do MySQL, mas na minha o codigo abaixo nao funcionou:

SELECT AVG(nota) media, tipo
FROM avaliacoes a
JOIN hospedagens h 
ON h.hospedagem_id = a.hospedagem_id;
GROUP BY tipo;

Apresentou este erro:
SELECT AVG(nota), tipo FROM avaliacoes a JOIN hospedagens h ON h.hospedagem_id = a.hospedagem_id LIMIT 0, 1000 Error Code: 1140. In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'insightplaces.h.tipo'; this is incompatible with sql_mode=only_full_group_by

Ele funcionou apenas apos fazer algumas modificações:


SELECT AVG(a.nota) media, h.tipo
FROM avaliacoes a
JOIN hospedagens h
ON h.hospedagem_id = a.hospedagem_id
GROUP BY h.tipo;

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Ei! Tudo bem, Diego?

Algumas versões mais antigas do MySQL (ou configurações com ONLY_FULL_GROUP_BY ativado) podem não gerar esse erro, permitindo consultas menos restritivas. No entanto, em versões mais recentes (a partir do MySQL 5.7), o modo estrito é padrão, e é uma boa prática seguir essas regras para evitar resultados inesperados.

No código que deu erro, o MySQL reclamou porque a coluna tipo não estava na cláusula GROUP BY nem era usada em uma função de agregação. Isso viola a regra do ONLY_FULL_GROUP_BY, que exige que todas as colunas no SELECT sejam ou agregadas, ou agrupadas.

E no seu código ajustado, funcionou justamente por especificar h.tipo no SELECT e no GROUP BY, além de qualificar a coluna nota como a.nota. Isso deixou claro para o MySQL de qual tabela cada coluna vem (avaliações ou hospedagens) e garantiu que a coluna tipo fosse corretamente agrupada.

Este conteúdo pode abrir em inglês e se preferir ler em português, recomendo que utilize o tradutor automático do navegador.

Espero ter ajudado e qualquer dúvida, compartilhe no fórum.

Até mais, Diego!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado!