📈 Aggregaties
Statistieken berekenen met COUNT, SUM, AVG — en groeperen met GROUP BY en HAVING.
Aggregatiefuncties
Aggregatiefuncties berekenen een waarde over meerdere rijen en geven één resultaat terug.
COUNT()
Telt rijen
SELECT COUNT(*) FROM gebruikers;SUM()
Telt waarden op
SELECT SUM(prijs) FROM producten;AVG()
Berekent het gemiddelde
SELECT AVG(leeftijd) FROM gebruikers;MIN()
Laagste waarde
SELECT MIN(prijs) FROM producten;MAX()
Hoogste waarde
SELECT MAX(prijs) FROM producten;COUNT(DISTINCT)
Unieke waarden tellen
SELECT COUNT(DISTINCT categorie) FROM producten;COUNT(*) telt alle rijen inclusief NULL. COUNT(kolom) telt alleen rijen waarbij die kolom niet NULL is.
GROUP BY — per groep aggregeren
GROUP BY verdeelt rijen in groepen en past een aggregatiefunctie toe op elke groep.
SELECT COUNT(*) FROM producten;
-- Geeft: 6 (alle producten samen)
SELECT categorie, COUNT(*)
FROM producten
GROUP BY categorie;
-- Elektronica: 3, Meubels: 2, Wonen: 1
SELECT
categorie,
COUNT(*) AS aantal_producten,
AVG(prijs) AS gemiddelde_prijs,
MIN(prijs) AS goedkoopste,
MAX(prijs) AS duurste
FROM producten
GROUP BY categorie
ORDER BY gemiddelde_prijs DESC;
Elke kolom in SELECT die geen aggregatiefunctie is, moet in GROUP BY staan. Anders geeft de database een fout of willekeurige waarden.
HAVING — groepen filteren
HAVING filtert groepen na GROUP BY. WHERE kan geen aggregatiefuncties gebruiken — HAVING wel.
-- Filtert VOOR het groeperen
SELECT categorie, COUNT(*)
FROM producten
WHERE prijs > 50
GROUP BY categorie;
-- Filtert NA het groeperen
SELECT categorie, COUNT(*)
FROM producten
GROUP BY categorie
HAVING COUNT(*) >= 2;
-- Categorieën met gemiddelde prijs > 100,
-- waarbij we goedkope producten (< 30) eerst uitsluiten
SELECT
categorie,
COUNT(*) AS aantal,
AVG(prijs) AS gem_prijs
FROM producten
WHERE prijs >= 30
GROUP BY categorie
HAVING AVG(prijs) > 100
ORDER BY gem_prijs DESC;
Aliassen & afronden
Met AS geef je kolommen een leesbare naam. Met ROUND() rond je decimalen af.
SELECT
COUNT(*) AS totaal_producten,
ROUND(AVG(prijs), 2) AS gemiddelde_prijs,
SUM(voorraad) AS totale_voorraad
FROM producten;
-- p is een alias voor producten
SELECT p.naam, p.prijs
FROM producten AS p
WHERE p.prijs > 100;
SELECT
COUNT(*) AS totaal_gebruikers,
SUM(actief) AS actieve_gebruikers,
ROUND(AVG(leeftijd), 1) AS gemiddelde_leeftijd,
MIN(leeftijd) AS jongste,
MAX(leeftijd) AS oudste
FROM gebruikers;
Oefening — statistieken berekenen
- Hoeveel producten zijn er per categorie?
- Wat is de gemiddelde prijs van alle producten?
- Welke categorieën hebben een gemiddelde prijs boven €100? (HAVING)
- Wat is de totale voorraadwaarde (prijs × voorraad) van alle producten?
🧠 Kennischeck
Les 6 afgerond!
Je berekent nu statistieken en groepeert data — de basis van elk dashboard en rapport.