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:
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 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.
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
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!