MySQL-Fehler „ist nicht in GROUP BY“
Dieser Fehler tritt auf, wenn Sie nicht aggregierte Spalten in die SELECT-Klausel von a aufnehmen Abfrage mit einer GROUP BY-Klausel, die die Gruppierungsanforderungen nicht erfüllt. In diesem Fall löst die Abfrage:
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name` ORDER BY `count` DESC LIMIT 0, 25
den Fehler aus, da Typ, Sprache und Code nicht in GROUP BY enthalten sind. Um dieses Problem zu beheben, müssen Sie alle nicht aggregierten Spalten in die Gruppierung nach Anforderungen integrieren:
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name`, `type`, `language`, `code` ORDER BY `count` DESC LIMIT 0, 25
SQL-Gruppierung nach Anforderungen
SQL92 schreibt vor, dass jede Spalte referenziert wird Außerhalb von Aggregationsfunktionen in der SELECT-Klausel müssen in der GROUP BY-Klausel enthalten sein. Allerdings lockert SQL99 diese Anforderung dahingehend, dass diese Spalten funktional von der Group-by-Klausel abhängig sein müssen.
MySQL-Gruppierungsverhalten
MySQL ermöglicht eine teilweise Gruppierung nach Dies kann zu nicht deterministischen Ergebnissen führen. Betrachten Sie beispielsweise die folgende Abfrage:
create table t (x int, y int); insert into t (x,y) values (1,1),(1,2),(1,3); select x,y from t group by x;
Diese Abfrage kann einen zufälligen y-Wert für jede x-Gruppe zurückgeben, wie in der folgenden Ausgabe gezeigt:
+------+------+ | x | y | +------+------+ | 1 | 1 | +------+------+
Verhindern Teilweise gruppieren nach
Um dieses unbestimmte Verhalten zu verhindern, können Sie @@sql_mode auf setzen 'ONLY_FULL_GROUP_BY':
set @@sql_mode='ONLY_FULL_GROUP_BY'; select x,y from t group by x; ERROR 1055 (42000): 'test.t.y' isn't in GROUP BY
Das obige ist der detaillierte Inhalt vonWie behebe ich den MySQL-Fehler „ist nicht in GROUP BY'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!