Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Quais são os benefícios do modo only_full_group_by?


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 precisa
dessas 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 .