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():
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:
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.
Inhoudsopgave
- Inleiding
- De eerste tabel
- De database benaderen vanuit PHP
- Invoegen van records
- Selecteren van records
- Wijzigen van records
- Verwijderen van records
- Sleutels en constraints
- Selecteren uit meerdere tabellen: JOINS
- Werken met data en tijden
- Aggregate functies en GROUP BY
- Debuggen: het oplossen van SQL fouten
- Slotwoord en referenties