Hier ist ein Beispiel für eine SQL-Anweisung, in der wir HAVING
verwenden:
ist es nicht genau dasselbe, wenn wir das tun:
%Vor%Was ist der Unterschied zwischen diesen beiden?
In Ihrem Beispiel sollten sie das Gleiche tun. Aber WHERE
wird vor GROUP BY
verarbeitet und hat daher keinen Zugriff auf aggregierte Werte (dh die Ergebnisse der Funktionen Min()
, Max()
usw.). HAVING
wird nach GROUP BY
verarbeitet und kann so verwendet werden, um die Ergebnismenge auf nur diejenigen zu beschränken, deren aggregierte Werte mit einem bestimmten Prädikat übereinstimmen.
In Ihrem Beispiel ist es dasselbe, weil Sie keine GROUP BY
habenAndernfalls wird HAVING nach GROUP BY angewendet, das nach WHERE ...
angewendet wird Wenn wir sagen, dass HAVING mit einem einfachen Filter ( x = 2
) genau ist wie WHERE, weil x = 2
nur dann eine Bedeutung hat, wenn Sie darauf gruppiert sind. Normalerweise verwenden Sie HAVING für ein Aggregat (zB COUNT(*) > 2
), das erst nach GROUP BY
Nein, weil das für Aggregatfunktionen oder Gruppierung nach Klausel ist.
Zum Beispiel:
%Vor%Die erste Abfrage würde nicht ausgeführt.
Nein, sie sind völlig verschieden.
Bedingungen sind zum Gruppieren von Aggregatfunktionen. Sie werden berechnet, nachdem der aggregierte Wert berechnet wurde.
Beispiel:
%Vor% Hier wird der having
-Teil ausgewertet nachdem die Abfrage den count (1) -Wert für jede Gruppe berechnet hat.
Wie andere (meistens) korrekt angegeben haben, wird in SQL die WHERE
-Klausel vor der SELECT
-Klausel ausgewertet, daher ist das Ergebnis einer gesetzten Funktion in der WHERE
-Klausel "out of scope".
Zum Beispiel können Sie das NICHT tun:
%Vor%, weil der Spaltenkorrelationsname TopScore
nicht im Bereich für die WHERE
-Klausel enthalten ist.
Natürlich könnten wir eine Unterabfrage verwenden:
%Vor% Das Problem war, dass frühe Implementierungen von SQL (beginnend mit IBMs System R) keine Unterstützung für abgeleitete Tabellen hatten, daher wurde das nicht intuitive HAVING
geboren.
Sie können die ganze traurige Geschichte in HAVING A Blunderful Time lesen (oder Wish You Were WHERE) von Hugh Darwen, von dem ich die obigen Beispiele ausgeliehen habe.
HAVING gibt eine Suchbedingung für eine Gruppe oder eine Aggregatfunktion an, die in einer SELECT-Anweisung verwendet wird.
Eine HAVING-Klausel ist wie eine WHERE-Klausel, sie gilt jedoch nur für Gruppen als Ganzes, während die WHERE-Klausel für einzelne Zeilen gilt.
Having Ссылка
Tags und Links sql