SQL: Gruppierte Daten mit dem HAVING Befehl eingrenzen

Der SQL HAVING-Befehl ist die WHERE-Bedingung für gruppierte Daten. Das HAVING-Statement ermöglicht es ein gruppiertes Resultset auf Basis einer Aggregatfunktion einzugrenzen. HAVING folgt immer dem GROUP BY-Befehl, kann also nicht davorstehen. Die allgemeine SQL-Syntax lautet:

SELECT column_name FROM table GROUP BY column_name HAVING condition;

Mithilfe des HAVING-Befehls wird also definiert, wie die gruppierte Datenmenge eingeschränkt werden soll.

Beispiel: HAVING versus WHERE

Grenzen wir unser Beispiel so ein, dass alle Filme gezählt werden, die eine Leihdauer kleiner als 5 Tage haben:

SELECT rental_rate, rental_duration, COUNT(rental_rate) AS AnzahlFilme FROM film GROUP BY rental_rate, rental_duration HAVING rental_duration < 5 ORDER BY rental_rate;

Bisher haben wir solche Bedingungen immer mit WHERE-Bedingung geschrieben, was in dem aufgezeigten Beispiel auch ohne Probleme möglich ist. Die SQL-Syntax mit einer WHERE-Bedingung lautet in diesem Fall:

SELECT rental_rate, rental_duration, COUNT(rental_rate) AS AnzahlFilme FROM film WHERE rental_duration < 5 GROUP BY rental_rate, rental_duration ORDER BY rental_rate;

Und liefert das gleiche Ergebnis:

Allerdings kann die WHERE-Bedingung nicht in Kombination mit einer Aggregatfunktion (COUNT(rental_rate)) genutzt werden. Dafür kommt der HAVING-Befehl zum Einsatz, der letztendlich ähnlich wie WHERE-Bedingung arbeitet. Die entsprechende SQL-Syntax lautet:

SELECT rental_rate, rental_duration, COUNT(rental_rate) AS AnzahlFilme FROM film GROUP BY rental_rate, rental_duration HAVING AnzahlFilme < 60 ORDER BY rental_rate;

(Visited 1.554 times, 1 visits today)

Schreibe einen Kommentar

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