SQL HAVING: So filtern Sie Ergebnisse auf Basis von Aggregatsfunktionen

SQL HAVING ist eine Bedingung, die auf bereits gruppierte Einträge angewendet werden kann. Sie funktioniert mit Aggregatsfunktionen und wird genutzt, um Ergebnismengen einzuschränken.

Was ist SQL HAVING?

Neben dem bekannten WHERE gibt es in der Structured Query Language eine weitere Bedingung, die häufig genutzt wird. SQL HAVING wurde hinzugefügt, um Daten anhand bestimmter Kriterien zu filtern. Die Bedingung wird mit dem SQL-Befehl SELECT und der Anweisung SQL GROUP BY angewendet. Während die letztere Ergebnisse gruppiert, schränkt SQL HAVING diese Ergebnismenge mit Hilfe unterschiedlicher Aggregatsfunktionen ein. Die Bedingung wurde eingeführt, da WHERE nicht mit Aggregatsfunktionen wie SQL AVG(), SQL COUNT(), MAX(), MIN() und SUM() interagieren kann. SQL HAVING wird hinter den Anweisungen WHERE (sofern vorhanden) und GROUP BY, aber vor ORDER BY eingesetzt.

vServer (VPS) von IONOS

Günstige und starke VPS für Webserver, Mailserver und eigene Anwendungen mit persönlichem Berater und 24/7 Support!

100 % SSD-Speicher
Bereit in 55 Sek.
SSL Zertifikat

Syntax und Funktionsweise

Um die Funktionsweise und den Nutzen von SQL HAVING zu verstehen, lohnt sich ein Blick auf die Syntax der Klausel. Diese sieht so aus:

SELECT name_der_spalte(n)
FROM name_der_tabelle
WHERE bedingung
GROUP BY name_der_spalte(n)
HAVING bedingung
ORDER BY name_der_spalte(n);
sql

Häufig wird eine Aggregatsfunktion auf eine oder mehrere Spalten angewendet. Danach wird zur Lokalisierung der Name der Tabelle angegeben. Die Bedingung WHERE ist optional. GROUP BY fasst identische Werte zu Gruppen zusammen, die mit HAVING noch genauer gefiltert und mit ORDER BY in die gewünschte Reihenfolge gebracht werden.

Beispiel für die Bedingung

Am einfachsten lässt sich SQL HAVING mit Hilfe eines einfachen Beispiels veranschaulichen. Dafür erstellen wir eine kleine Tabelle namens „Kundenliste“. Diese enthält die Spalten „Kundennummer“, „Name“, „Standort“ und „Artikel“:

Kundennummer Name Standort Artikel
1427 Schmidt Berlin 13
1377 Schulz Hamburg 9
1212 Peters Hamburg 15
1431 Müller München 22
1118 Becker Berlin 10

Nun nutzen wir SQL HAVING, um herauszufinden, wie viele Kunden und Kundinnen aus Hamburg zehn oder mehr Artikel bestellt haben. Dafür verwenden wir den folgenden Code und geben die Anzahl mit Hilfe eines SQL-Aliases als „AnzahlBestellungen“ an:

SELECT Standort, COUNT(Standort) AS AnzahlBestellungen
FROM Kundenliste
WHERE Standort = 'Hamburg'
GROUP BY Standort, Artikel
HAVING Artikel > 10;
sql

Die entsprechende Ausgabe sieht folgendermaßen aus:

Standort AnzahlBestellungen
Hamburg 1

Die Bedingung in Kombination mit INNER JOIN

Auch mit dem Keyword INNER JOIN können Sie SQL HAVING kombinieren. Dafür erstellen wir eine zweite Tabelle namens „Artikel_01“, in der hinterlegt wird, wie oft und wann ein bestimmter Artikel bestellt wurde. Sie enthält eine Bestellnummer, eine Kundennummer, die Anzahl und ein Bestelldatum und sieht aus wie folgt:

Bestellnummer Kundennummer Anzahl Datum
00283 1427 4 2024-01-15
00284 1211 7 2024-01-19
00285 1275 15 2024-01-29
00286 1431 10 2024-02-01
00287 1427 9 2024-02-05

Nun können wir das System zum Beispiel anweisen, uns alle Kundinnen und Kunden anzuzeigen, die mehr als eine Bestellung aufgegeben haben. Der passende Code ist dieser:

SELECT Kundenliste.Name, COUNT(Artikel_01.Bestellnummer) AS AnzahlBestellungen
FROM (Artikel_01
INNER JOIN Kundenliste ON Artikel_01.Kundennummer = Kundenliste.Kundennummer)
GROUP BY Name
HAVING COUNT(Artikel_01.Bestellnummer) > 1;
sql

Dies ist die Ausgabe, die wir dann erhalten:

Name AnzahlBestellungen
Schmidt 2

Alternative zu SQL HAVING

Eine Alternative zu SQL HAVING ist WHERE. Dabei können beide Optionen allerdings nicht genau gleich verwendet werden. WHERE wird für einzelne Einträge eingesetzt und kann neben SELECT auch mit DELETE oder UPDATE kombiniert werden. HAVING ist hingegen ausschließlich für gruppierte Einträge vorgesehen und nur mit SELECT kompatibel. WHERE wird vor GROUP BY eingesetzt und HAVING danach. Außerdem kann nur SQL HAVING mit Aggregatsfunktionen arbeiten.

Tipp

Ein Server, der perfekt auf Ihre Anforderungen zugeschnitten ist: Mit SQL-Server-Hosting von IONOS wählen Sie zwischen MSSQL, MySQL und MariaDB und profitieren von einer starken Sicherheitsarchitektur, hervorragender Performance und einer persönlichen Beratung zu jeder Zeit.