SQL leren: GROUP BY
Per groep met GROUP BY
"Eén totaal is mooi," zegt Lien, "maar welk type fiets brengt het meest op? En uit welk land komen de beste klanten?" Dat is niet één getal, maar één getal per groep.
GROUP BY maakt groepjes
GROUP BY type legt alle fietsen met hetzelfde type op één stapel. De aggregatiefunctie werkt dan per stapel: je krijgt één rij per type, met het aantal fietsen van dat type.
SELECT type, COUNT(*) AS aantal FROM fietsen GROUP BY type| type | aantal |
|---|---|
| bakfiets | 2 |
| e-bike | 4 |
| kinderfiets | 2 |
| stadsfiets | 6 |
| tandem | 2 |
Eén regel voor je kolommen
Met GROUP BY mag elke kolom in je SELECT maar twee dingen zijn: een kolom waarop je groepeert, of een aggregatiefunctie zoals SUM.
Zet je er een andere kolom bij, dan klaagt SQLite niet, maar kiest het een willekeurige waarde uit de groep. Andere databases geven een fout. Hier de omzet per fietstype.
SELECT fietstype, SUM(bedrag) AS omzet FROM verhuringen GROUP BY fietstype| fietstype | omzet |
|---|---|
| bakfiets | 244 |
| e-bike | 1029 |
| kinderfiets | 24 |
| stadsfiets | 239 |
| tandem | 165 |
Meerdere kolommen, en sorteren
Je kan op meerdere kolommen groeperen: dan is elke combinatie een groep, zoals bij DISTINCT. Hier het aantal fietsen per type en merk.
GROUP BY staat na WHERE en vóór ORDER BY. Sorteren mag ook op het resultaat van een functie, zoals ORDER BY COUNT(*) DESC.
SELECT type, merk, COUNT(*) AS aantal FROM fietsen GROUP BY type, merk ORDER BY type| type | merk | aantal |
|---|---|---|
| bakfiets | Babboe | 1 |
| bakfiets | Urban Arrow | 1 |
| e-bike | Gazelle | 1 |
| e-bike | Oxford | 1 |
| e-bike | Stromer | 2 |
| kinderfiets | Batavus | 1 |
| kinderfiets | Oxford | 1 |
| stadsfiets | Batavus | 2 |
Probeer het zelf
Toon de omzet per land, het land met de hoogste omzet bovenaan.
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