<< >> Up Title Contents Index

Gruppen mit Bedingungen: HAVING

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


<< >> Up Title Contents Index