Probleem:
U wilt groepen rijen zoeken met een specifiek aantal items in een groep.
Voorbeeld:
Onze database heeft een tabel met de naam product
met gegevens in de volgende kolommen:id
, name
en category
.
id | naam | categorie |
---|---|---|
1 | bank | meubels |
2 | handschoenen | kleding |
3 | T-shirt | kleding |
4 | stoel | meubels |
5 | bureau | meubels |
6 | kijken | elektronica |
7 | fauteuil | meubels |
8 | rok | kleding |
9 | radio-ontvanger | elektronica |
Laten we de categorie producten zoeken met meer dan twee vermeldingen.
Oplossing:
SELECT category, COUNT(id) FROM product GROUP BY category HAVING COUNT(id)>2;
Dit zijn de resultaten:
categorie | tel |
---|---|
meubels | 4 |
kleding | 3 |
Discussie:
Gebruik de HAVING-component om records te filteren op het opgegeven aantal rijen in de groep. Het filtert rijen met behulp van een conditie-aggregatiefunctie zoals AANTAL. Gebruik eerst in SELECT de naam van een kolom of kolommen om rijen te groeperen (dit is een categorie in ons voorbeeld) en plaats vervolgens de aggregatiefunctie COUNT, die het aantal records in elke groep optelt. Om het aantal rijen te tellen, gebruikt u de id-kolom waarin unieke waarden zijn opgeslagen (in ons voorbeeld gebruiken we COUNT(id)
). Gebruik vervolgens de GROUP BY-component om records te groeperen volgens kolommen (de GROUP BY
categorie hierboven). Nadat u GROUP BY hebt gebruikt om records te filteren met aggregatiefuncties zoals COUNT, gebruikt u de HAVING-component. Het wordt altijd gebruikt na de GROUP BY-clausule. In HAVING gebruiken we een voorwaarde om een waarde te vergelijken met een waarde die wordt geretourneerd door de aggregatiefunctie. In het voorbeeld vergelijken we of COUNT(id) een waarde hoger dan twee retourneert. Indien waar, wordt de categorie geretourneerd met het aantal producten.