SELECT met HAVING

circle-check

Met de WHERE-clausule kon je voorwaarden uitdrukken voor het selecteren (of updaten of wissen) van records. Je kan met WHERE echter geen voorwaarden uitdrukken op kolommen die vermeld zijn in de GROUP BY-clause of op geaggregeerde waarden. Met andere woorden, dit gaat niet:

USE ApDB;
SELECT Geslacht
FROM Honden
GROUP BY Geslacht
WHERE AVG(Leeftijd) > 4;

Ook dit zal niet werken:

USE ApDB;
SELECT AVG(Leeftijd)
FROM Honden
GROUP BY Geslacht
WHERE Geslacht = 'mannelijk';

Dat komt omdat WHERE rij per rij bekijkt en beslist of die rij behouden of verworpen wordt.

Als je voorwaarden op gegroepeerde data wil uitdrukken, maak je gebruik van HAVING (0050__SelectHonden.sql) en (0051__SelectHonden.sql):

-- een voorbeeld met een gegroepeerde kolom
USE ApDB;
SELECT AVG(Leeftijd)
FROM Honden
GROUP BY Geslacht
HAVING Geslacht = 'mannelijk';

In het kort: voor voorwaarden op kolommen in een GROUP BY of op geaggregeerde waarden gebruik je HAVING, voor andere voorwaarden gebruik je WHERE.

circle-info

In MySQL kan je in een HAVING-clausule ook verwijzen naar bepaalde andere kolommen, maar volgens de MySQL-documentatie zelfarrow-up-right wordt dit afgeraden.

circle-exclamation

Last updated