In MySQL können Sie auf Szenarien stoßen, in denen eine Ansicht wie die folgende zulässig ist:
SELECT AVG(table_name.col1), AVG(table_name.col2), AVG(table_name.col3), table_name.personID, table_name.col4 FROM table_name GROUP BY table_name.personID;
Diese Abfrage enthält eine Aggregatfunktion für Spalte 1, Spalte 2 und Spalte 3, wählt aber auch Spalte 4 ohne diese aus Aggregation. Normalerweise würde eine solche Abfrage in anderen Datenbanksystemen wie Microsoft SQL Server als ungültig angesehen.
In MySQL ist dieses Verhalten jedoch zulässig. Es ist wichtig zu verstehen, warum:
Bei der Auswahl nicht aggregierter Spalten in einer GROUP BY-Abfrage wählt MySQL einen beliebigen Wert aus der Gruppe aus. Dies entspricht normalerweise dem Wert aus der zuerst in der Gruppe gespeicherten Zeile.
Diese Funktion kann zu mehrdeutigen Abfragen führen, bei denen der ausgewählte Wert für die nicht aggregierte Spalte je nach Wert variieren kann in der Reihenfolge der Zeilen in der Gruppe. Beispielsweise könnte die folgende Abfrage abhängig von der Zeilenreihenfolge unterschiedliche Werte für Spalte4 für dieselbe Personen-ID zurückgeben:
SELECT AVG(table1.col1), table1.personID, persons.col4 FROM table1 JOIN persons ON (table1.personID = persons.id) GROUP BY table1.personID;
Um Mehrdeutigkeiten zu vermeiden, ist es wichtig, Spalten auszuwählen, die funktional sind abhängig von den Spalten in den GROUP BY-Kriterien. Das bedeutet, dass es für jeden eindeutigen Wert der Gruppierungsspalte(n) nur einen möglichen Wert für die Spalte „mehrdeutig“ geben sollte.
MySQL stellt den SQL-Modus ONLY_FULL_GROUP_BY zur Verfügung kann aktiviert werden, damit MySQL dem ANSI SQL-Standard entspricht. In diesem Modus führt die Auswahl nicht aggregierter Spalten in einer GROUP BY-Abfrage zu einem Fehler, es sei denn, diese Spalten sind funktional von den Gruppierungsspalten abhängig.
Während MySQL die Auswahl nicht aggregierter Spalten zulässt Bei aggregierten Spalten in GROUP BY-Abfragen ist es wichtig, sich der Möglichkeit mehrdeutiger Ergebnisse bewusst zu sein. Um deterministische Abfragen sicherzustellen, wird empfohlen, sie so umzuschreiben, dass sie eindeutig nach funktional abhängigen Spalten gruppiert sind, oder den Modus ONLY_FULL_GROUP_BY zu aktivieren.
Das obige ist der detaillierte Inhalt vonWarum erlaubt MySQL nicht aggregierte Spalten in GROUP BY-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!