sql >> Databasteknik >  >> RDS >> Mysql

Vilka är fördelarna med endast_full_grupp_efter-läget?

only_full_group_by =on säger till MySQL-motorn:Använd inte GROUP BY när du är osäker på vilka resultat du ska visa och kasta ett fel. Endast tillämpa den om Group By berättar specifikt vad du ska göra. d.v.s. när Group By är full och perfekt!

only_full_group_by =off säger till MySQL-motorn:använd alltid GROUP BY och om du tvivlar på vilka resultat du ska välja, välj bara ett slumpmässigt!

Du behöver inte stänga av den om du använder GROUP BY ordentligt!

Exempel:

Tabell:användare

 id   |  name
----------------
  1      ali
  2      john
  3      ali

När du använder GROUP BYname kolumn:

SELECT * FROM users GROUP BY name;

Det finns två möjliga resultat:

  1      ali
  2      john     

ELLER

  2      john     
  3      ali

MYSQL vet inte vilket resultat man ska välja! Eftersom det finns olika id s men båda har name=ali .

Lösning 1:

bara välja name fält:

SELECT name FROM users GROUP BY name;

resultat:

  ali
  john     

Detta är en perfekt lösning. tar bort kolumner som gör GROUP BY förvirrad. Det betyder att du vet vad du gör. Vanligtvis behöver du inte
de här kolumnerna, men om du behöver dem, gå till Lösning3 !

Lösning 2:

Stänger av only_full_group_by . MYSQL väljer ett av de två möjliga resultaten Slumpmässigt !! (Det är ok om du inte bryr dig om vilket id det kommer att välja, men kom ihåg att aktivera det omedelbart efter din fråga för att förhindra oväntade beteenden i framtida groupBys)

Lösning3

Använd ett Aggregate fungerar som MIN() , MAX() för att hjälpa MYSQL att bestämma vad den måste välja.

Till exempel:

SELECT MAX(id), name FROM users GROUP BY name;

resultat:

  2      john     
  3      ali

Den kommer att välja ali rad som har det maximala id .



  1. Omvandling av rad till kolumn i MySQL

  2. Vilken MySQL-kollation är bäst för att acceptera alla unicode-tecken?

  3. Billigaste sättet att avgöra om en MySQL-anslutning fortfarande är vid liv

  4. Hur man kontrollerar om mysqli_query raderade några rader