Aggregate functies en GROUP BY

Een van de laatste aspecten die ik in deze tutorial wil behandelen is het gebruik van verzamelingsfuncties en de bijbehorende GROUP BY clausule.

Verzamelingsfuncties worden gebruikt om gegevens over groepen records te bepalen. Denk dan bijvoorbeeld aan het aantal werknemers per salaris schaal of de gemiddelde salaris schaal van alle werknemers. Deze berekeningen worden allemaal uitgevoerd aan de hand van verzamelingsfuncties (aggregate functies) waarvan we hier enkele voorbeelden zullen bekijken.

Het aantal werknemers per salaris schaal (SQL)
Om een aantal records te bepalen gebruiken we de functie COUNT():

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
    salaris_schaal,
    COUNT(id) AS aantal
FROM
    werknemers
GROUP BY
    salaris_schaal
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
+----------------+--------+
| salaris_schaal | aantal |
+----------------+--------+
|             10 |      3 |
|             15 |      1 |
|             18 |      1 |
|             20 |      1 |
+----------------+--------+

In de SELECT clausule selecteren we de salaris_schaal en gebruiken we COUNT(id) om het aantal werknemers te bepalen. Door de GROUP BY die we aan het eind van de query toevoegen wordt het aantal werknemers gegroepeert per salaris_schaal.

Er is een belangrijke regel voor het gebruik van GROUP BY:
Bij het gebruik van GROUP BY moeten alle kolommen die in de SELECT clausule voorkomen en geen onderdeel zijn van een aggregate functie, opgenomen zijn in de GROUP BY clausule

We zien dat bovenstaande query aan deze regel voldoet. De kolom salaris_schaal komt voor in de SELECT en wordt niet gebruikt in een aggregate functie. Daarom staat hij ook in de GROUP BY. In dit eenvoudige voorbeeldje is het wellicht nog logisch dat die kolom in de GROUP BY moet staan, maar naarmate je queries langer worden is deze regel een goede controle.

Gemiddelde salaris schaal
Om de gemiddelde salaris schaal van alle werknemers te bepalen, gebruiken we de volgende query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
    AVG(salaris_schaal) AS gemiddelde
FROM
    werknemers
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
+------------+
| gemiddelde |
+------------+
|    13.8333 |
+------------+

In deze query nemen we geen GROUP BY clausule op, simpelweg omdat er geen kolom is om op te groeperen. We willen dan ook het gemiddelde van alle werknemers ophalen.

Meer toepassingen van aggregate functies
Deze twee voorbeeldjes zijn wederom maar het kleine topje van een hele grote ijsberg. Maar ook dit onderwerp is veel te uitgebreid om in deze tutorial te behandelen. Mocht je meer over dit onderwerp willen lezen, dan verwijs ik je graag naar mijn tutorial over het juiste gebruik van GROUP BY.

« Lees de omschrijving en reacties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.