Die SQL HAVING Anweisung gibt eine Bedingung für eine Gruppe oder eine Aggregatfunktion an.
SELECT Spalte
FROM Tabelle
WHERE Bedingung
GROUP BY Spalte
HAVING Bedingung;
SQL HAVING - Beispiel
Wir möchten alle Städte ausgeben, bei denen wir mehr als 100 Kunden haben:
SELECT Stadt, COUNT(Kunden_ID) AS Anzahl_Kunden
FROM Bestellungen
GROUP BY Stadt
HAVING COUNT(Kunden_ID) > 100;
WHERE würde in diesem Fall nicht funktionieren, da die Bedingung sich auf eine Aggregatfunktion bezieht.
SQL HAVING und Aliase
Der Alias der Spalte für die Aggregatfunktion kann nicht in die HAVING Anweisung eingesetzt werden, da HAVING vor dem SELECT vom System gelesen wird. In der Anweisung muss die vollständige Funktion stehen. Möchte ein Unternehmer alle Städte ausgeben, in denen er mehr als 100 Kunden hat, wird folgender Befehl nicht funktionieren:
SELECT Stadt, COUNT(Kunden_ID) AS Anzahl_Kunden
FROM Bestellungen
GROUP BY Stadt
HAVING Anzahl_Kunden > 100;
Anstatt von COUNT(Kunden_ID) wurde Anzahl_Kunden eingesetzt, was nicht funktionieren kann, da das SQL-System das HAVING vor dem SELECT einliest. Es wird aber erst im SELECT festgelegt, dass COUNT(Kunden_ID) auch Anzahl_Kunden heißen kann. Da das System nicht in die Zukunft springen kann, werden wir eine Fehlermeldung bekommen.