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.
- Bis zu 1 Gbit/s Bandbreite & unbegrenzt Traffic
- Schneller NVMe-SSD-Speicher
- Kostenlose Plesk Web Host Edition
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);
sqlHä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;
sqlDie 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;
sqlDies 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.
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.