SELECT met HAVING
Kennisclip (ondertiteling beschikbaar)
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';
-- een voorbeeld met een geaggregeerde waarde
USE ApDB;
SELECT Geslacht
FROM Honden
GROUP BY Geslacht
HAVING AVG(Leeftijd) > 4;
In het kort: voor voorwaarden op kolommen in een GROUP BY
of op geaggregeerde waarden gebruik je HAVING
, voor andere voorwaarden gebruik je WHERE
.
Er bestaan queries die je hetzelfde resultaat opleveren, of je nu WHERE
of HAVING
gebruikt. Dat betekent niet dat ze inwisselbaar zijn. Wat achter de schermen gebeurt, is wel degelijk verschillend. Soms zijn er gewoon verschillende werkwijzen die tot hetzelfde resultaat leiden.
Last updated
Was this helpful?