Ga naar inhoud

Header

Aggregeren

Introductie

We hebben het volgende geleerd:

  • Met GROUP BY kun je groeperen.
  • Met HAVING kun je na groeperen filteren.
  • Met de COUNT() functie kun je het aantal rijen tellen.

Bijvoorbeeld:

SELECT
  year,
  COUNT(*)
FROM
  movies
GROUP BY
  year
ORDER BY
  year DESC;
year count
2005 1
2004 2
2003 4
... ...
Columns: 2
Rows: 20




  • 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 BY groeperen we op year.
  • Aggregatiefuncties:
    • Met COUNT(*) tellen we het aantal rijen.
      • Daarmee hebben we het aantal films per jaar.
SELECT
  year,
  COUNT(*) AS movies_count
FROM
  movies
GROUP BY
  year
ORDER BY
  year DESC;
year movies_count
2005 1
2004 2
2003 4
... ...
Columns: 2
Rows: 20




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 BY groeperen we op year.
  • 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.
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
... ... ...
Columns: 3
Rows: 20




3. AVG(): het gemiddelde

AVG() berekent het gemiddelde van waarden in een numerieke kolom.

We passen dit toe in het voorbeeld.

  • Groeperen:
    • Met GROUP BY groeperen we op year.
  • 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.
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
... ... ... ...
Columns: 4
Rows: 20




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 BY groeperen we op year.
  • 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.
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
... ... ... ... ...
Columns: 5
Rows: 20




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 BY groeperen we op year.
  • 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.
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
... ... ... ... ... ...
Columns: 6
Rows: 20




Samenvatting

  • Met GROUP BY kun je op een of meerdere kolommen groeperen.
  • Met HAVING kun 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.