MySQLs einzigartige Behandlung von Aggregatfunktionen ohne GROUP BY
In MySQL ist es im Gegensatz zu anderen relationalen Datenbankverwaltungssystemen möglich, Aggregatfunktionen zu verwenden in der SELECT-Liste ohne Angabe einer GROUP BY-Klausel. Dieses Verhalten hat bei Entwicklern, die mit restriktiveren DBMS-Plattformen vertraut sind, Fragen aufgeworfen.
Die MySQL-Begründung
MySQL ermöglicht diese Flexibilität von Natur aus und betrachtet es als wertvolle Erweiterung von SQL Standard. Wenn eine Aggregatfunktion ohne GROUP BY verwendet wird, stellt das zurückgegebene Ergebnis eine einzelne Zeile dar, die den über die gesamte Tabelle berechneten Aggregatwert enthält. Dies kann in Szenarien nützlich sein, in denen zusammenfassende Informationen ohne die Notwendigkeit einer Gruppierung gewünscht werden.
Beispiel
Bedenken Sie beispielsweise die Abfrage:
SELECT col1, col2, SUM(col3) FROM tbl1;
Ohne ein GROUP BY interpretiert MySQL dies als eine einzelne Gruppe und liefert die folgende Ausgabe:
col1 col2 SUM(col3) ------------------------- (First row value of col1) (First row value of col2) (Sum of all col3 values)
Einschränkungen mit ONLY_FULL_GROUP_BY
MySQLs nachsichtiger Ansatz bei der Handhabung von Aggregaten Funktionen ohne GROUP BY wurden eingeführt, wobei ONLY_FULL_GROUP_BY auf OFF gesetzt war. Mit der Veröffentlichung von MySQL Version 5.7.5 ist ONLY_FULL_GROUP_BY standardmäßig aktiviert, wodurch dieses Verhalten eingeschränkt wird.
Die Aktivierung von ONLY_FULL_GROUP_BY stellt sicher, dass Aggregatfunktionen nur in Verbindung mit einer GROUP BY-Klausel verwendet werden können, was zu einem Fehler führt, wenn Es wird eine Abfrage ohne sie angetroffen. Diese Änderung entspricht dem SQL-Standard und fördert die Datenkonsistenz.
Das obige ist der detaillierte Inhalt vonWarum kann ich Aggregatfunktionen ohne GROUP BY in MySQL verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!