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
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.
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 |
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.
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 |
Id
Bestelldatum
Bestellnummer
KundenId
Gesamtbetrag
Id
Vorname
Nachname
Stadt
Land
Telefon
Problem: Listen Sie alle Kunden auf, deren durchschnittliche Bestellungen
zwischen $1000 und $1200 liegen.
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 |