MySQL Aggregat Funktionsproblem

8

Im folgenden Beispiel gibt die Abfrage min() Ergebnisse zurück, aber die Abfrage max() nicht?

%Vor%     
Ogrish Man 04.09.2011, 05:32
quelle

1 Antwort

7

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 der GROUP 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.

    
Martin Smith 04.09.2011, 06:04
quelle

Tags und Links