only_full_group_by =ativado diz ao mecanismo MySQL:Não aplique
GROUP BY
quando você tem dúvidas sobre quais resultados mostrar e lança um erro. Somente aplique-o se Group By
especificamente lhe diz o que fazer. ou seja, quando o Group By
é completo e perfeito! only_full_group_by =desativado diz ao mecanismo MySQL:sempre aplique
GROUP BY
e se você tiver dúvidas sobre quais resultados escolher, basta escolher um aleatoriamente! Você não precisa desativá-lo se usar
GROUP BY
corretamente! Exemplo:
Tabela:usuários
id | name
----------------
1 ali
2 john
3 ali
Quando você usa
GROUP BY
no name
coluna:SELECT * FROM users GROUP BY name;
Há dois resultados possíveis:
1 ali
2 john
OU
2 john
3 ali
MYSQL não sabe qual resultado escolher! Porque existem diferentes
id
s, mas ambos têm name=ali
. Solução1:
selecionando apenas o
name
campo:SELECT name FROM users GROUP BY name;
resultado:
ali
john
Esta é uma solução perfeita. removendo colunas que tornam
GROUP BY
confuso. Isso significa que você sabe o que está fazendo. Normalmente, você não precisadessas colunas, mas se precisar delas, vá para Solução3 !
Solução2:
Desativando
only_full_group_by
. O MYSQL escolherá um dos dois resultados possíveis RANDOMLY !! (Tudo bem se você realmente não se importa com o que id
ele escolherá, mas lembre-se de ligá-lo imediatamente após sua consulta para evitar comportamentos inesperados em futuros groupBys) Solução3
Use um
Aggregate
função como MIN()
, MAX()
para ajudar o MYSQL a decidir o que deve escolher. Por exemplo:
SELECT MAX(id), name FROM users GROUP BY name;
resultado:
2 john
3 ali
Ele escolherá o
ali
linha que tem o máximo id
.