Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was sind die Vorteile des Modus only_full_group_by?

only_full_group_by =ein teilt der MySQL-Engine mit:Wende GROUP BY nicht an wenn Sie Zweifel haben, welche Ergebnisse angezeigt werden sollen, und einen Fehler ausgeben. Nur anwenden, wenn Group By sagt Ihnen konkret, was zu tun ist. d.h. wenn der Group By ist voll und perfekt!

only_full_group_by =aus sagt der MySQL-Engine:Wende immer GROUP BY an und wenn Sie Zweifel haben, welche Ergebnisse Sie auswählen sollen, wählen Sie einfach zufällig eines aus!

Sie müssen es nicht ausschalten, wenn Sie GROUP BY verwenden richtig!

Beispiel:

Tabelle:Benutzer

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

Wenn Sie GROUP BY verwenden auf name Spalte:

SELECT * FROM users GROUP BY name;

Es gibt zwei mögliche Ergebnisse:

  1      ali
  2      john     

ODER

  2      john     
  3      ali

MYSQL weiß nicht, welches Ergebnis es wählen soll! Weil es unterschiedliche id gibt s, aber beide haben name=ali .

Lösung 1:

nur den name auswählen Feld:

SELECT name FROM users GROUP BY name;

Ergebnis:

  ali
  john     

Dies ist eine perfekte Lösung. Entfernen von Spalten, die GROUP BY machen verwirrt. Das bedeutet, dass Sie wissen, was Sie tun. Normalerweise benötigen Sie
diese Spalten nicht, aber wenn Sie sie brauchen, gehen Sie zu Lösung3 !

Lösung 2:

Deaktivieren von only_full_group_by . MYSQL wählt RANDOMLY eines der beiden möglichen Ergebnisse aus !! (Es ist in Ordnung, wenn es Ihnen egal ist, welche id es wird wählen, aber denken Sie daran, es einzuschalten unmittelbar nach Ihrer Anfrage, um unerwartetes Verhalten in zukünftigen GroupBys zu verhindern)

Lösung3

Verwenden Sie ein Aggregate Funktion wie MIN() , MAX() um MYSQL bei der Entscheidung zu helfen, was es wählen muss.

Zum Beispiel:

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

Ergebnis:

  2      john     
  3      ali

Es wird das ali auswählen Zeile, die die maximale id hat .