Kom godt i gang med SQL

Gruppering

I DB2 Universal Database kan data analyseres på grundlag af bestemte kolonner i en tabel.

Du kan organisere rækker vha. en grupperingstruktur, der er defineret i et GROUP BY-udtryk. Den enkleste type gruppe er et sæt rækker, der har ens værdier i kolonnen GROUP BY. Kolonnenavnene i SELECT-udtrykket skal enten være grupperingskolonner eller en beregningsfunktion. Beregningsfunktioner returnerer en værdi for hver gruppe i GROUP BY-udtrykket. Hver gruppe repræsenteres af en enkelt række i resultatsættet. I det følgende eksempel vises en oversigt over den højeste løn i hver afdeling:

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

Resultatet er:

     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

Bemærk, at MAX(SALARY) beregnes for hver afdeling, dvs. for en gruppe der er angivet i GROUP BY-udtrykket, ikke for hele selskabet.

Brug af WHERE-udtrykket sammen med GROUP BY-udtrykket

En grupperingsforespørgsel kan indeholde et WHERE-udtryk, som eliminerer irrelevante rækker, før grupperne dannes, og beregningerne foretages. WHERE-udtrykket skal angives før GROUP BY-udtrykket. For eksempel:

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

Resultatet er:

     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

Bemærk, at de kolonnenavne, der angives i SELECT-sætningen, også er med i GROUP BY-udtrykket. Hvis et kolonnenavn ikke angives begge steder, opstår der en fejl. GROUP BY-udtrykket returnerer en række for hver entydig kombination af WORKDEPT og EDLEVEL.

Brug af HAVING-udtrykket efter GROUP BY-udtrykket

Du kan angive en kvalificerende betingelse for grupper, så DB2 kun returnerer et resultat for de grupper, der opfylder betingelsen. Det gør du ved at inkludere et HAVING-udtryk efter GROUP BY-udtrykket. Et HAVING-udtryk kan indeholde ét eller flere prædikater, der er forbundet med AND eller OR. Hvert prædikat sammenligner en egenskab for gruppen, f.eks. AVG(SALARY) med én af følgende:

I dette eksempel vises den højeste og laveste løn i afdelinger med over 4 medarbejdere:

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

Resultatet er:

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

Det er muligt, men ikke almindeligt, for en forespørgsel at indeholde et HAVING-udtryk uden et GROUP BY-udtryk. I det tilfælde betragter DB2 hele tabellen som én gruppe. Fordi tabellen betragtes som én gruppe, kan du højst få vist én resultatrække. Hvis HAVING-betingelsen er sand for tabellen som helhed, vises det valgte resultat, som udelukkende består af beregningsfunktioner, ellers returneres ingen rækker.


[ Øverst på siden | Forrige side | Næste side | Indholdsfortegnelse | Stikordsregister ]