Heim >Datenbank >MySQL-Tutorial >Warum gibt MySQL den Fehler „ist nicht in GROUP BY' aus?

Warum gibt MySQL den Fehler „ist nicht in GROUP BY' aus?

Susan Sarandon
Susan SarandonOriginal
2024-12-05 12:15:13327Durchsuche

Why Does MySQL Throw an

MySQL-Fehler „ist nicht in GROUP BY“: Eine umfassende Erklärung

Beim Ausführen einer MySQL-Abfrage, die einen SELECT COUNT und einen SELECT mit GROUP BY kombiniert, ist dies der Fall Es kann zu Abweichungen in der Anzahl der Ergebnisse kommen. Der Grund dafür ist oft die berüchtigte Fehlermeldung „‚Feldname‘ ist nicht in GROUP BY“.

Um den Fehler zu verstehen, lassen Sie uns das Problem aufschlüsseln:

MySQL und GROUP BY

GROUP BY gruppiert Zeilen basierend auf den Werten einer oder mehrerer angegebener Spalten. In unserem Fall enthält die Abfrage mit GROUP BY Klauseln wie GROUP BY name. Das bedeutet, dass nur Zeilen mit eindeutigen Namenswerten gruppiert werden.

SQL92 vs. SQL99 vs. MySQL

SQL92 erforderte ursprünglich, dass alle Spalten in der SELECT-Klausel auch in der GROUP BY-Klausel enthalten sein mussten. Allerdings hat SQL99 diese Einschränkung gelockert, sodass Spalten, die funktional von den GROUP BY-Spalten abhängig sind, in die SELECT-Klausel aufgenommen werden können.

MySQL erlaubt standardmäßig „partielles Gruppieren nach“, was bedeutet, dass es Spalten in der zulässt SELECT-Klausel, die nicht explizit in der GROUP BY-Klausel enthalten sind. Dies kann jedoch zu nicht deterministischen Ergebnissen führen.

Die Lösung

Um das Problem zu beheben, stellen Sie sicher, dass alle Spalten in der SELECT-Klausel entweder Teil der GROUP BY-Klausel sind oder funktional davon abhängig sind Es. In unserem Beispiel müssen Typ, Sprache und Code zur GROUP BY-Klausel hinzugefügt werden:

SELECT `name`, `type`, `language`, `code` 
FROM `users` 
WHERE `verified` = '1' 
GROUP BY `name`, `type`, `language`, `code` 
ORDER BY `count` DESC LIMIT 0, 25

Full Group By vs. Partial Group By

MySQL bietet auch eine Einstellung, @ @sql_mode, der so eingestellt werden kann, dass eine vollständige Gruppierung nach erzwungen wird:

set @@sql_mode='ONLY_FULL_GROUP_BY';

Mit dieser Einstellung führt jede Abfrage, die keine vollständige Gruppierung nach hat, zu einem Fehler.

Das obige ist der detaillierte Inhalt vonWarum gibt MySQL den Fehler „ist nicht in GROUP BY' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn