Im folgenden Beispiel gibt die Abfrage min()
Ergebnisse zurück, aber die Abfrage max()
nicht?
Die Klausel HAVING
wird verwendet, um Gruppen von Zeilen zu filtern. Sie referenzieren min(a)
und max(a)
, die (in Ermangelung einer GROUP BY
-Klausel) über alle a
-Werte in der Tabelle aggregieren, dann aber einen Vergleich mit einem einzelnen a
-Wert verwenden.
Also welchen a
Wert soll MySQL verwenden? Alle anderen RDBMS, die ich kenne, würden an dieser Stelle einen Fehler auslösen, aber MySQL erlaubt dies. Aus den Dokumenten
Standard-SQL erlaubt der
HAVING
-Klausel nicht, irgendeine Spalte zu benennen nicht in derGROUP BY
-Klausel gefunden, es sei denn, es ist in einem Aggregat eingeschlossen Funktion. MySQL erlaubt die Verwendung solcher Spalten zur Vereinfachung Berechnungen. Diese Erweiterung setzt voraus, dass die nicht gruppierten Spalten haben die gleichen gruppenweisen Werte. Sonst ist das Ergebnis unbestimmt.
Also in Ihrem Fall von den Ergebnissen, die Sie bekommen, scheint es, dass es 1
als Skalarwert für a
verwendet hat, aber dieses Verhalten ist nicht garantiert und es hätte genauso gut 2
oder irgendein anderes verwendet werden können existing a
value.
Tags und Links mysql aggregate-functions