SQL leren: HAVING
Groepen filteren met HAVING
Laatste vraag van Lien: "Op welke landen moet ik volgend jaar mikken? Alleen de landen die echt iets opbrachten." Daarvoor moet je niet de rijen filteren, maar de groepen.
HAVING filtert groepen
WHERE filtert rijen, HAVING filtert groepen. Het komt na GROUP BY en mag aggregatiefuncties gebruiken: hier blijven alleen de landen met meer dan vijf verhuringen over.
SELECT klant_land, COUNT(*) AS verhuringen FROM verhuringen GROUP BY klant_land HAVING COUNT(*) > 5| klant_land | verhuringen |
|---|---|
| België | 10 |
| Duitsland | 6 |
| Nederland | 9 |
WHERE vóór, HAVING na het groeperen
De database werkt in deze volgorde: WHERE gooit rijen weg, GROUP BY maakt groepen, HAVING gooit groepen weg, ORDER BY sorteert. Een functie als SUM in WHERE geeft daarom een fout: de groepen bestaan dan nog niet.
Je mag ze samen gebruiken. Hier: alleen augustus, en alleen de fietstypes die toen meer dan 100 euro opbrachten.
SELECT fietstype, SUM(bedrag) AS omzet FROM verhuringen WHERE start_datum BETWEEN '2025-08-01' AND '2025-08-31' GROUP BY fietstype HAVING SUM(bedrag) > 100| fietstype | omzet |
|---|---|
| e-bike | 267 |
| stadsfiets | 101 |
Probeer het zelf
Welke merken hebben meer dan twee fietsen? Toon het merk en het aantal.
Klaar voor meer?
De volledige les heeft 6 oefeningen, van makkelijk naar uitdagend, met hints, punten en een reeks die je kan opbouwen.
Begin aan de les