Stel dat je het maximum salaris wil zien van elke afdeling, maar enkel van de afdelingen met meer dan één werknemer. Dat kun je niet bereiken met een WHERE maar je moet daar een HAVING voor gebruiken.
Eerst maken we de query zonder HAVING.
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id;
En dan de query met HAVING zodat je het verschil ziet.
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 1;
We maken een alias 'afdeling' voor department_id en een alias 'max_salaris' voor MAX(salary). We sorteren op het maximum salaris (kolom 2 op de bovenste regel) van hoog naar laag (DESC).
SELECT department_id AS afdeling, MAX(salary) AS max_salaris
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 1
ORDER BY 2 DESC;
En we voegen nog een WHERE toe om de query compleet te maken. De afdeling met als department_id 90 mag niet meetellen. Op de regel met ORDER BY mag je ook het alias (max_salaris) gebruiken dat op de SELECT regel staat.
SELECT department_id AS afdeling, MAX(salary) AS max_salaris
FROM employees
WHERE department_id != 90
GROUP BY afdeling
HAVING COUNT(*) > 1
ORDER BY 2 DESC;
Voor het ongelijk teken != mag je ook <> gebruiken.