SQL: GROUP BY en HAVING

In deze post sta ik stil bij een stukje SQL. Het SQL statement dat ik wil behandelen is ‘group by’, waarmee we gegevens uit de in een tabel kunnen samenvoegen, of wel groeperen. Hierbij is ook het ‘having’ statement nuttig, waarmee een voorwaarde kan worden toegekend aan welke van de gegroepeerde gegevens getoond moeten worden in het resultaat van je query.

Dat vraagt om een voorbeeld. Stel we hebben een tabel, die informatie bevat over landen, haar provincies (in de tabel district), haar steden en de inwonersaantallen daarvan. Die tabel ziet er alsvolgt uit:

Stel nu dat we willen weten in hoeveel inwoners de gezamelelijke steden in elk district hebben. Dat kunnen we opvragen met de volgende query opdracht.

Deze opdracht geeft een volgende resultaat terug. Ik heb hier niet het complete resultaat van de query afgedruukt, daar die in mijn voorbeelddatabase 1412 records beslaat. Merk op dat er dus ook landen bij zijn, waarbij de kolom district geen waarde bevat.

We gaan nu een stap verder. Door aan de query een ‘having’ clause toe te voegen, gaan we een extra voorwaarde aan de selectie toekennen. Ik wil dit keer alleen die districten terug zien, waarvan de vermelde steden gezamelijk meer dan een miljoen inwoners hebben. De SQL daarvoor ziet er alsvolgt uit.

En, ter verduidelijking, een greep uit het resultaat.

Uiteraard is het ook mogelijk in de query aanvullende voorwaarde mee te geven aan de selectie voordat die met het group by statement wordt gegroepeerd. De volgende SQL bijvoorbeeld, levert enkel districten terug in Nederland. In dit geval filteren we dus op landcode.

En het resultaat.

De voorwaarden kunnen we natuurlijk helemaal naar wens verder uitbouwen. Bijvoorbeeld door nog een extra and clause mee te geven, waarmee alleen districten worden geselecteerd waarvan de naam met een ‘Z’ begint. Uiteraard blijft de having clause van kracht die zegt dat het gevonden resultaat alleen mag worden getoond wanneer het district meer dan een miljoen inwoners heeft.

We kunnen dit soort queries natuurlijk nog verder uitbouwen door koppelingen te maken naar andere tabellen, en zo informatie uit meerdere tabellen in onze database in een query resultaat uitvragen. Daarop zal ik in een volgende post ingaan.

Geef als eerste een reactie

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd.


*