Beispiel:
SELECT ort, COUNT(*) anzahl, FIXED (AVG(konto),7,2) avg_konto, SUM(konto) sum_konto FROM kunde GROUP BY ort HAVING COUNT(*) > 1
Vergleichen Sie das Anfragekommando mit dem vorhergegangenen Beispiel. Die Zeile 'HAVING COUNT(*) > 1' eliminiert alle Orte, die nur einen Kunden haben.
Man könnte fragen, wann man HAVING anstelle von WHERE benutzt. Tatsächlich ist ihr Gebrauch ähnlich. Eine Bedingung mit WHERE schließt Daten aus der zu durchsuchenden Tabelle aus. Dem Gebrauch von HAVING geht im Normalfall die Verwendung einer Funktion, die sich auf eine gesamte Spalte einer Zwischenergebnistabelle bezieht, voraus.
Über die Spalten in der Ausgabeliste, auf die keine solche Funktion abgesetzt wurde, muß eine Gruppierung mittels GROUP BY vorgenommen werden. Bei nicht erfüllter Bedingung nach HAVING werden dann Gruppen von Werten von der Ausgabe ausgeschlossen. Wird auf alle Spalten der Ausgabeliste eine Funktion der oben beschriebenen Art angewendet, ist kein GROUP BY notwendig, und die Bedingung wird nur für die eine Ausgabezeile überprüft.
(Vergleichen Sie die folgenden Beispiele mit denen aus Kapitel 3.8.)
Zeige für alle Städte außer München das Minimum, den Durchschnitt und das Maximum des Kontostandes aller Kunden, wenn sie einen durchschnittlichen Kontostand >= 0.00 haben:
SELECT ort, MIN(konto) min_konto, FIXED (AVG(konto),7,2) avg_konto, MAX(konto) max_konto FROM kunde WHERE ort <> 'München' GROUP BY ort HAVING AVG(konto) >= 0.00
Zeige für jeden Ort mit mehr als zwei Kunden die Anzahl der Kunden, die dort wohnen, und den durchschnittlichen Kontostand:
SELECT ort, COUNT(*) anzahl, FIXED (AVG(konto),7,2) avg_konto FROM kunde GROUP BY ort HAVING COUNT(*) > 2
Zeige den summierten Kontostand für jeden Ort mit einem totalen Kontostand von höchstens -100.00 und mindestens zwei Kunden:
SELECT ort, SUM(konto) sum_konto FROM kunde GROUP BY ort HAVING COUNT(*) >= 2 AND SUM(konto) <= -100.00