SQL HAVING-Klausel

Was bewirkt die HAVING-Klausel in einer Abfrage?

Die HAVING-Klausel ist wie WHERE, operiert aber mit gruppierten Datensätzen, die durch GROUP BY zurückgegeben werden.
HAVING bezieht sich auf zusammengefasste Gruppendatensätze, während WHERE sich auf einzelne Datensätze bezieht.
Es werden nur die Gruppen zurückgegeben, die die HAVING-Kriterien erfüllen.

HAVING erfordert, dass eine GROUP BY-Klausel vorhanden ist.
Beide, WHERE und HAVING, können gleichzeitig in der gleichen Abfrage verwendet werden.

Die SQL HAVING-Syntax

Die allgemeine Syntax ist

SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition
Die allgemeine Syntax mit ORDER BY ist:
SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition ORDER BY column-names

KUNDE

Id

Vorname

Nachname

Stadt

Land

Telefon

SQL GROUP BY Beispiele

Problem: Sie sollen die Anzahl der Kunden in jedem Land auflisten.
Nur Länder mit mehr als 10 Kunden aufnehmen.
SELECT COUNT(Id), Country FROM Customer GROUP BY CountryHAVING COUNT(Id) > 10
Ergebnis: 3 Datensätze
Anzahl Land
11 Frankreich
11 Deutschland
13 USA

KUNDE

Id

Vorname

Nachname

Stadt

Land

Telefon

Problem: Geben Sie die Anzahl der Kunden in jedem Land,
außer den USA, sortiert von oben nach unten an.
Nur Länder mit 9 oder mehr Kunden aufnehmen.
SELECT COUNT(Id), Country FROM Customer WHERE Country 'USA' GROUP BY CountryHAVING COUNT(Id) >= 9 ORDER BY COUNT(Id) DESC
Ergebnis: 3 Datensätze
Anzahl Land
11 Frankreich
11 Deutschland
9 Brasilien

Bestellung

Id

Bestelldatum

Bestellnummer

KundenId

Gesamtbetrag

KUNDEN

Id

Vorname

Nachname

Stadt

Land

Telefon

Problem: Listen Sie alle Kunden auf, deren durchschnittliche Bestellungen
zwischen $1000 und $1200 liegen.
SELECT AVG(TotalAmount), FirstName, LastName FROM O JOIN Customer C ON O.CustomerId = C.Id GROUP BY FirstName, LastNameHAVING AVG(TotalAmount) BETWEEN 1000 AND 1200
Ergebnis: 10 Datensätze
Durchschnitt Vorname Nachname
1081.215000 Miguel Angel Paolino
1063.420000 Isabel de Castro
1008.440000 Alexander Feuer
1062.038461 Thomas Hardy
1107.806666 Pirkko Koskitalo
1174.945454 Janete Limeira
1073.621428 Antonio Moreno
1065.385000 Rita Müller
1183.010000 José Pedro Freyre
1057.386666 Carine Schmitt

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.