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.
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.
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:
Eksempel:
HAVING AVG(SALARY) > 2 * MIN(SALARY)
For eksempel:
HAVING AVG(SALARY) > 20000
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.