HAVING

Das HAVING kann man als WHERE des GROUP BY bezeichnen. HAVING folgt immer dem GROUP BY (wobei GROUP BY nicht enthalten sein muss), kann also nicht davor stehen. Mit HAVING kann man die Ausgabe auf Basis von Aggregatfunktionen begrenzen. Gehen wir wieder von folgender stark vereinfachten Tabelle aus:

Tabelle zu HAVING

Wir möchten diesmal alle Rubriken ausgegeben haben, bei denen die Summe der Buchseiten aller Bücher über 500 Seiten ist. Außerdem sollen zusätzlich die Gesamtanzahl der Seiten pro Rubrik ausgegeben werden. In der Vorüberlegung ist klar: Man braucht zum einem die Aggregatfunktion SUM(), zum anderen muss nach Rubrik gruppiert werden, da die Rubrik zusätzlich ausgegeben werden soll.

Nun hat man bisher ähnliche Bedingungen wie der oben genannten, immer mit WHERE gelöst. Dies ist diesmal aber nicht mehr möglich, da die Bedingung eine Aggregatfunktion (SUM(seitenanzahhl)) umfasst und WHERE nicht mit Aggregatfunktionen verknüpft werden kann. Deshalb kommt in diesem Fall HAVING zum Einsatz, dass letztendlich ähnlich wie WHERE arbeitet. Hier das ganze in SQL:


SELECT Rubrik, SUM(Seitenanzahl) AS Summe_Seiten
 FROM buecher
 GROUP BY Rubrik
 HAVING Summe_Seiten >500

Es wird folgende Ausgabe geliefert:
Having Ausgabe