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

SQL HAVING wird zusätzlich zur GROUP BY Anweisung verwendet, weil WHERE Bedingungen keine Aggregatfunktionen beinhalten können und sich nur auf einzelne Spalten beziehen können.

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.

ARTIKEL TEILEN

Hast du Fragen? Hinterlasse einen Kommentar!