SQL Erste Schritte

Gruppierung

DB2 Universal Database kann Daten basierend auf bestimmten Spalten einer Tabelle analysieren.

Sie können Zeilen gemäß einer Gruppierungsstruktur organisieren, die in einer Klausel GROUP BY definiert wird. In ihrer einfachsten Form besteht eine Gruppe aus einer Reihe von Zeilen mit identischen Werten in den Spalten, die in der Klausel GROUP BY angegeben sind. Die Spaltennamen in der Klausel SELECT müssen entweder Gruppierungsspalten oder Spaltenfunktionen angeben. Spaltenfunktionen geben einen Wert für jede Gruppe zurück, die in der Klausel GROUP BY definiert ist. Jede Gruppe wird in der Ergebnismenge durch eine Zeile dargestellt. Das folgende Beispiel erzeugt ein Ergebnis, das das höchste Gehalt für jede Abteilungsnummer auflistet:

     SELECT DEPT, MAX(SALARY) AS MAXIMUM 
        FROM STAFF
        GROUP BY DEPT

Diese Anweisung erzeugt das folgende Ergebnis:

     DEPT   MAXIMUM  
     ------ ---------
         10  22959.20
         15  20659.80
         20  18357.50
         38  18006.00
         42  18352.80
         51  21150.00
         66  21000.00
         84  19818.00

Bitte beachten Sie, daß MAX(SALARY) für jede Abteilung, eine durch die Klausel GROUP BY definierte Gruppe, und nicht für das gesamte Unternehmen berechnet wird.

Verwenden einer Klausel WHERE mit einer Klausel GROUP BY

Eine Gruppierungsabfrage kann eine Standardklausel WHERE enthalten, die Zeilen, welche das Qualifikationsmerkmal nicht erfüllen, eliminiert, bevor die Gruppen gebildet und die Spaltenfunktionen berechnet werden. Die Klausel WHERE muß vor der Klausel GROUP BY angegeben werden. Beispiel:

     SELECT WORKDEPT, EDLEVEL, MAX(SALARY) AS MAXIMUM
        FROM EMPLOYEE
        WHERE HIREDATE > '1979-01-01'
        GROUP BY WORKDEPT, EDLEVEL
        ORDER BY WORKDEPT, EDLEVEL
 

Das Ergebnis lautet:

     WORKDEPT EDLEVEL MAXIMUM    
     -------- ------- -----------
     D11           17    18270.00
     D21           15    27380.00
     D21           16    36170.00
     D21           17    28760.00
     E11           12    15340.00
     E21           14    26150.00

Bitte beachten Sie, daß jeder in der Anweisung SELECT angegebene Spaltenname auch in der Klausel GROUP BY enthalten ist. Werden die Spaltennamen nicht in beiden Positionen angegeben, erhalten Sie einen Fehler. Die Klausel GROUP BY gibt eine Zeile für jede eindeutige Kombination aus WORKDEPT und EDLEVEL zurück.

Verwenden der Klausel HAVING nach der Klausel GROUP BY

Sie können eine Qualifizierungsbedingung auf Gruppen anwenden. DB2 gibt dann nur für die Gruppen ein Ergebnis zurück, die die Bedingung erfüllen. Zu diesem Zweck fügen Sie nach der Klausel GROUP BY eine Klausel HAVING ein. Eine Klausel HAVING kann eines oder mehrere Prädikate enthalten, die durch die Operatoren AND und OR verbunden sind. Jedes Prädikat vergleicht ein Merkmal der Gruppe (wie z. B. AVG(SALARY)) mit einem der folgenden Elemente:

Beispielsweise sucht die folgende Abfrage nach dem höchsten und dem niedrigsten Gehalt in Abteilungen mit mehr als 4 Mitarbeitern:

     SELECT WORKDEPT, MAX(SALARY) AS MAXIMUM, MIN(SALARY) AS MINIMUM
        FROM EMPLOYEE
        GROUP BY WORKDEPT
        HAVING COUNT(*) > 4
        ORDER BY WORKDEPT

Diese Anweisung erzeugt das folgende Ergebnis:

     WORKDEPT MAXIMUM     MINIMUM    
     -------- ----------- -----------
     D11         32250.00    18270.00
     D21         36170.00    17250.00
     E11         29750.00    15340.00

Es ist möglich (wenngleich unüblich), daß eine Abfrage eine Klausel HAVING, aber keine Klausel GROUP BY enthält. In diesem Fall behandelt DB2 die gesamte Tabelle als eine Gruppe. Da die Tabelle als Gruppe behandelt wird, können Sie höchstens eine Ergebniszeile erhalten. Wenn die in der Klausel HAVING angegebene Bedingung für die Tabelle als ganzes wahr (= zutreffend) ist, wird das ausgewählte Ergebnis (das vollständig aus Spaltenfunktionen bestehen muß) zurückgegeben. Andernfalls werden keine Zeilen zurückgegeben.


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]