GROUP BY en HAVING

De HAVING clausule is net zoiets als een WHERE clausule en wordt in combinatie met een GROUP BY clausule gebruikt. Het verschil tussen HAVING en WHERE is dat je in een WHERE geen verzamelingsfuncties op mag nemen en in een HAVING wel.

Wederom eerst de basisgegevens waar we mee werken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
+----+-------+--------+------------+
| id | naam  | aantal | datum      |
+----+-------+--------+------------+
| 1  | Piet  | 115    | 2007-07-11 |
| 2  | Karel | 230    | 2007-07-11 |
| 3  | Piet  | 45     | 2007-07-11 |
| 4  | Kees  | 135    | 2007-07-11 |
| 5  | Tom   | 190    | 2007-07-12 |
| 6  | Karel | 150    | 2007-07-12 |
| 7  | Kees  | 30     | 2007-07-12 |
| 8  | Piet  | 90     | 2007-07-12 |
+----+-------+--------+------------+


Voorbeeld 12: Deelnemers met een totaal aantal punten > 200
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT naam, SUM(aantal) AS totaal
FROM punten
GROUP BY naam
HAVING SUM(aantal) > 200

Dit geeft de volgende resultaten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
+-------+--------+
| naam  | totaal |
+-------+--------+
| Karel | 380    |
| Piet  | 250    |
+-------+--------+

In dit geval zijn we gebonden aan het gebruik van HAVING omdat we vergelijking met een verzamelingsfunctie als criterium gebruiken. Als we in dit geval WHERE in plaats van HAVING hadden gebruikt, hadden we een melding gekregen dat er een fout in de syntax op de plaats van de WHERE zat.

Een ander verschil tussen WHERE en HAVING is het moment waarop er op de conditie getest wordt. Bij een WHERE gebeurt dit voor de individuele records vóór het groeperen, bij een HAVING gebeurt dit voor groepstotalen na het groeperen.

Ook op dit punt wijkt MySQL weer af van de SQL standaard. Volgens de standaard mogen in een HAVING alleen kolommen opgenomen worden die in een GROUP BY clausule voorkomen of die subject zijn van een verzamelingsfunctie. MySQL echter staat toe dat in HAVING kolommen voorkomen die genoemd zijn in een SELECT, GROUP BY, externe subquery of in een verzamelingsfunctie. Wederom zou ik hier ook willen aanraden om alleen de SQL standaard te gebruiken.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Uitleg GROUP BY en gebruikte basisgegevens
  3. Fout gebruik van de GROUP BY clausule
  4. GROUP BY en verzamelingsfuncties
  5. Groeperen op meerdere kolommen
  6. GROUP BY en HAVING
  7. GROUP BY Modifiers
  8. Slotwoord en referenties

PHP tutorial opties

 
 

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.