
Aggregeren
Introductie
We hebben het volgende geleerd:
- Met
GROUP BYkun je groeperen. - Met
HAVINGkun je na groeperen filteren. - Met de
COUNT()functie kun je het aantal rijen tellen.
Bijvoorbeeld:
| year | count |
|---|---|
| 2005 | 1 |
| 2004 | 2 |
| 2003 | 4 |
| ... | ... |
- Hierbij is de
COUNT()functie een aggregatie functie.- Je telt het aantal rijen.
- Aggregeren is een ander woord voor groeperen.
- Hiernaast zijn er ook andere aggregatiefuncties.
Veelgebruikte aggregatiefuncties zijn:
COUNT()- Telt het aantal rijen.
SUM()- Berekent de som van waarden in een numerieke kolom.
AVG()- Berekent het gemiddelde van waarden in een numerieke kolom.
MIN()- Geeft het kleinste getal van waarden in een numerieke kolom.
MAX()- Geeft het grootste getal van waarden in een numerieke kolom.
We gaan deze aggregatiefuncties stap voor stap bekijken.
1. COUNT(): het aantal rijen
Onderstaand voorbeeld met COUNT() hebben we eerder gezien.
- Groeperen:
- Met
GROUP BYgroeperen we opyear.
- Met
- Aggregatiefuncties:
- Met
COUNT(*)tellen we het aantal rijen.- Daarmee hebben we het aantal films per jaar.
- Met
| year | movies_count |
|---|---|
| 2005 | 1 |
| 2004 | 2 |
| 2003 | 4 |
| ... | ... |
2. SUM(): het aantal rijen
SUM()berekent de som van waarden in een numerieke kolom.
We passen dit toe in het voorbeeld.
- Groeperen:
- Met
GROUP BYgroeperen we opyear.
- Met
- Aggregatiefuncties:
- Met
COUNT(*)tellen we het aantal rijen. - > Met
SUM(rank)tellen we het de scores van films uit een bepaald jaar bij elkaar op.
- Met
SELECT
year,
COUNT(*) AS movies_count,
SUM(rank) AS rank_sum
FROM
movies
GROUP BY
year
ORDER BY
year DESC;
| year | movies_count | rank_sum |
|---|---|---|
| 2005 | 1 | (NULL) |
| 2004 | 2 | 16.5 |
| 2003 | 4 | 24.5 |
| ... | ... | ... |
3. AVG(): het gemiddelde
AVG()berekent het gemiddelde van waarden in een numerieke kolom.
We passen dit toe in het voorbeeld.
- Groeperen:
- Met
GROUP BYgroeperen we opyear.
- Met
- Aggregatiefuncties:
- Met
COUNT(*)tellen we het aantal rijen. - Met
SUM(rank)tellen we het de scores van films uit een bepaald jaar bij elkaar op. - > Met
AVG(rank)berekenen we de gemiddelde score per jaar.
- Met
SELECT
year,
COUNT(*) AS movies_count,
SUM(rank) AS rank_sum,
AVG(rank) AS rank_avg
FROM
movies
GROUP BY
year
ORDER BY
year DESC;
| year | movies_count | rank_sum | rank_avg |
|---|---|---|---|
| 2005 | 1 | (NULL) | (NULL) |
| 2004 | 2 | 16.5 | 8.25 |
| 2003 | 4 | 24.5 | 8.166666666666666 |
| ... | ... | ... | ... |
4. MIN(): het kleinste getal
MIN()geeft het kleinste getal van waarden in een numerieke kolom.
We passen dit toe in het voorbeeld.
- Groeperen:
- Met
GROUP BYgroeperen we opyear.
- Met
- Aggregatiefuncties:
- Met
COUNT(*)tellen we het aantal rijen. - Met
SUM(rank)tellen we het de scores van films uit een bepaald jaar bij elkaar op. - Met
AVG(rank)berekenen we de gemiddelde score per jaar. - > Met
MIN(rank)krijgen we de laagste score per jaar.
- Met
SELECT
year,
COUNT(*) AS movies_count,
SUM(rank) AS rank_sum,
AVG(rank) AS rank_avg,
MIN(rank) AS rank_min
FROM
movies
GROUP BY
year
ORDER BY
year DESC;
| year | movies_count | rank_sum | rank_avg | rank_min |
|---|---|---|---|---|
| 2005 | 1 | (NULL) | (NULL) | (NULL) |
| 2004 | 2 | 16.5 | 8.25 | 8.2 |
| 2003 | 4 | 24.5 | 8.166666666666666 | 8 |
| ... | ... | ... | ... | ... |
5. MAX(): het grootste getal
MAX()geeft het grootste getal van waarden in een numerieke kolom.
We passen dit toe in het voorbeeld.
- Groeperen:
- Met
GROUP BYgroeperen we opyear.
- Met
- Aggregatiefuncties:
- Met
COUNT(*)tellen we het aantal rijen. - Met
SUM(rank)tellen we het de scores van films uit een bepaald jaar bij elkaar op. - Met
AVG(rank)berekenen we de gemiddelde score per jaar. - Met
MIN(rank)krijgen we de laagste score per jaar. - > Met
MAX(rank)krijgen we de hoogste score per jaar.
- Met
SELECT
year,
COUNT(*) AS movies_count,
SUM(rank) AS rank_sum,
AVG(rank) AS rank_avg,
MIN(rank) AS rank_min,
MAX(rank) AS rank_max
FROM
movies
GROUP BY
year
ORDER BY
year DESC;
| year | movies_count | rank_sum | rank_avg | rank_min | rank_max |
|---|---|---|---|---|---|
| 2005 | 1 | (NULL) | (NULL) | (NULL) | (NULL) |
| 2004 | 2 | 16.5 | 8.25 | 8.2 | 8.3 |
| 2003 | 4 | 24.5 | 8.166666666666666 | 8 | 8.4 |
| ... | ... | ... | ... | ... | ... |
Samenvatting
- Met
GROUP BYkun je op een of meerdere kolommen groeperen. - Met
HAVINGkun je (na groeperen) op een of meerdere kolommen filteren. - Er zijn meerdere aggregatiefuncties:
COUNT()- Telt het aantal rijen.
SUM()- Berekent de som van waarden in een numerieke kolom.
AVG()- Berekent het gemiddelde van waarden in een numerieke kolom.
MIN()- Geeft het kleinste getal van waarden in een numerieke kolom.
MAX()- Geeft het grootste getal van waarden in een numerieke kolom.
- Voorbeeld:
SELECT
year,
COUNT(*) AS movies_count,
SUM(rank) AS rank_sum,
AVG(rank) AS rank_avg
FROM
movies
GROUP BY
year
ORDER BY
year DESC;
- Er zijn nog meer aggergatiefuncties dan die hier zijn getoond.
- Afhankelijk van het SQL dialect.
- Bijvoorbeeld voor MS SQL Server.