Zurück zur Artikelliste Artikel
5 Leseminuten

SQL HAVING Tutorial

Lernen Sie, wie Sie die SQL HAVING-Klausel verwenden, um Gruppen nach Ihren eigenen Bedingungen zu filtern.

Die SQL HAVING-Klausel ist oft ein schwer verständliches Konzept, besonders für Anfänger. Darüber hinaus sind ihre spezifischen Anwendungsfälle ohne konkrete Beispiele, die auf realen Datensätzen basieren, oft schwer zu veranschaulichen. In diesem Lernprogramm lernen Sie, wie Sie die SQL HAVING-Klausel anwenden, um Gruppen von Datensätzen nach bestimmten Bedingungen zu filtern. Sie werden Beispiele sehen, in denen wir dieses Konzept zur Lösung von Geschäftsproblemen auf einen realistischen Datensatz anwenden.

Die Funktion der SQL HAVING-Klausel

Die SQL HAVING Klausel wird normalerweise zusammen mit der GROUP BY Klausel verwendet, um Gruppen von zurückgegebenen Zeilen zu filtern. Nur wenn die angegebene Bedingung TRUE ist, werden Zeilen in die Gruppe aufgenommen.

Die SQL GROUP BY Klausel ordnet Daten auf der Grundlage gemeinsamer Werte in Gruppen an; sie wird am häufigsten verwendet, um zusammenfassende Informationen zu erhalten und aggregierte Statistiken zu berechnen. Wenn Sie eine gründlichere Auffrischung zu diesem Thema suchen, lesen Sie diesen Artikel über SQL GROUP BY.

WHERE und HAVING sind vielleicht etwas verwirrend, aber der Unterschied ist leicht zu erklären. Die WHERE Klausel wendet eine Bedingung auf die gesamte Spalte an, indem sie einzelne Zeilen filtert. Sie funktioniert nicht mit Aggregatfunktionen wie SUM() und AVG(). Dagegen wendet HAVING Filterbedingungen auf die durch die Klausel GROUP BY erstellten Gruppen an. Sie kann mit Aggregatfunktionen verwendet werden.

Betrachten wir zum Beispiel die folgende Tabelle. Sie zeigt eine Liste von Kunden, gruppiert nach Städten in mehreren Ländern. Wenn wir Gruppen von Städten mit 3 oder mehr Kunden sehen wollten, bräuchten wir eine HAVING Klausel, die diese Bedingung für jede der Städte (d.h. die Gruppen) erfüllt.

CustomerIDCityCountry
009BerlinGermany
045BerlinGermany
101BerlinGermany
098BernSwitzerland
003BernSwitzerland
154Buenos AiresArgentina
111Buenos AiresArgentina
039Buenos AiresArgentina
191WallaPoland

Mit anderen Worten: Die HAVING -Klausel ist im Wesentlichen eine WHERE -Klausel, die auf die von GROUP BY zurückgegebenen Datensätze angewendet wird. (Wir haben auch einen ausführlicheren Vergleich zwischen HAVING und WHERE, falls Sie tiefer einsteigen möchten).

SQL HAVING-Syntax

HAVING funktioniert nicht ohne die GROUP BY Klausel. Sie muss der GROUP BY -Klausel in einer Abfrage folgen und vor der ORDER BY -Klausel stehen (falls Sie eine verwenden). Es werden nur Gruppen zurückgegeben, die die HAVING Kriterien erfüllen.

Versuchen wir zum Beispiel die folgende Abfrage für die customers Tabelle:

SELECT COUNT(CustomerID), City, Country
FROM Customers
WHERE Country = 'Brazil'
GROUP BY City, Country
HAVING COUNT(CustomerID) > 1

Was geht in dieser Abfrage vor sich?

  • Zunächst filtert die WHERE Klausel die zutreffenden Zeilen für das Land "Brasilien".
  • Zweitens gruppiert die GROUP BY -Klausel die Einträge auf der Grundlage der Spaltenwerte City und Country.
  • Drittens filtert die HAVING Klausel die Gruppen - in diesem Fall sind wir nur an brasilianischen Städten interessiert, die mehr als einen Kunden haben.

Der LearnSQL.de SQL für Anfänger behandelt die Syntax und die Anwendung der HAVING-Klausel in einer ansprechenden und interaktiven Umgebung. Wenn Sie praktische Übungen machen wollen, empfehle ich Ihnen diesen Kurs. Aber zuerst wollen wir uns weitere Beispiele für HAVING ansehen.

SQL HAVING-Beispiele

Lassen Sie uns in einige Beispiele mit verschiedenen Aggregatfunktionen eintauchen, damit wir verstehen können, wie die HAVING Klausel wirklich funktioniert. Wir verwenden die folgende Kunden OrderDetails Tabelle. Sie enthält insgesamt 518 Zeilen mit einfachen Bestelldaten. Dazu gehören Informationen wie die bestellten Quantity und ProductID sowie eine eindeutige OrderID für jede Bestellung.

OrderDetailIDOrderIDProductIDQuantity
1102481112
2102484210
310248725
410249149
510249142
6102495140
518104432812

Als Datenanalytiker besteht eine Ihrer Hauptaufgaben darin, Einblicke in Verkaufsdaten zu erhalten. Wir werden drei einfache Probleme untersuchen, um einige dieser Erkenntnisse zu gewinnen.

Beispiel 1: HAVING mit COUNT()

PROBLEM: Auflistung aller Produkte, für die mehr als 12 Einzelbestellungen vorliegen.

ABFRAGE:

SELECT COUNT(ProductID), ProductID
FROM OrderDetails
GROUP BY ProductID
HAVING COUNT(ProductID) > 12

ERGEBNIS:

Number of Records: 5
COUNT(ProductID)ProductID
1431
1459
1362
1371
1472

Hätten wir die Klausel HAVING nicht eingefügt, würde diese Abfrage im Wesentlichen die Anzahl der Datensätze zurückgeben, die der eindeutigen Anzahl von ProductIDs entspricht. Hier fasst GROUP BY Bestellungen mit demselben ProductID in Gruppen zusammen. Die HAVING Klausel setzt die Filterbedingung auf jede dieser Gruppen und gibt die Datensätze zurück, deren Anzahl größer als 12 ist.

Beispiel 2: HAVING mit SUM()

PROBLEM: Auflisten aller Produkte, für die mehr als 350 Gesamtmengen bestellt wurden.

ABFRAGE:

SELECT SUM(Quantity), ProductID
FROM OrderDetails
GROUP BY ProductID
HAVING SUM(Quantity) > 350
ORDER BY SUM(Quantity) DESC

ERGEBNIS:

Number of Records: 3
COUNT(ProductID)ProductID
45831
43060
36935

Im obigen Beispiel gruppiert GROUP BY die Bestellungen in ähnlicher Weise nach ProductID. Die Klausel HAVING setzt dann die Filterbedingung (die Summe der Spalte Quantity sollte über 350 liegen) auf jede dieser Gruppen. Schließlich gibt ORDER BY die Ergebnisse in absteigender Reihenfolge zurück.

Beispiel 3: HAVING mit AVG()

PROBLEM: Auflistung aller Produkte, von denen im Durchschnitt mehr als 35 Stück bestellt und mindestens 4 Bestellungen aufgegeben wurden.

ABFRAGE:

SELECT AVG(Quantity), COUNT(ProductID), ProductID
FROM OrderDetails
GROUP BY ProductID
HAVING AVG(Quantity) > 35 AND COUNT(ProductID) > 3
ORDER BY AVG(Quantity) DESC

ERGEBNIS:

Number of Records: 6
AVG(Quantity)ProductIDCOUNT(ProductID)
41.25234
41359
38.75584
35.836012
35.6445
35.11339

In Beispiel 3, nachdem wir die Bestellungen nach ProductID gruppiert haben, setzt die HAVING Klausel zwei Filterbedingungen auf die Gruppen: eine durchschnittliche Bestellmenge über 35 und eine Anzahl von Einzelbestellungen größer als 3.

Aus den drei obigen Beispielen haben wir gelernt, dass ProductID 31 zum Beispiel in der höchsten Anzahl von Einzelbestellungen (14) enthalten war und auch die größte Anzahl von Bestellmengen über alle erteilten Aufträge (458) hatte. Dies ist definitiv eines der beliebtesten Produkte im Laden!

Außerdem wiesen ProductIDs 23, 35 und 58 die höchsten Durchschnittsmengen pro Bestellung auf. Wichtige Erkenntnisse wie diese sind wertvoll, da sie den Unternehmen zeigen, auf welche Produkte sie sich konzentrieren und wie sie diese vermarkten sollten.

Die Beherrschung der SQL HAVING-Klausel

Wie wir gerade gesehen haben, ist die HAVING -Klausel für die Berechnung von Aggregatwerten für Datengruppen unverzichtbar. Sie wird daher immer in Kombination mit einer GROUP BY -Klausel verwendet und schränkt die Daten auf die gruppierten Datensätze und nicht auf einzelne Datensätze ein.

Wenn Sie mehr über die Verwendung der SQL HAVING-Klausel erfahren möchten, besuchen Sie unseren Kurs SQL für Anfänger . Er behandelt die HAVING-Klausel im Detail und erklärt mehr über das Gruppieren, Filtern und Ordnen von Daten. Es gibt auch viele Übungsaufgaben und Quizze, damit Sie sich mit den SQL-Grundlagen vertraut machen können.