Having

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;

 

clip0180

 

 

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;

 

clip0181

 

 

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;

 

clip0182

 

 

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;

 

clip0183

 

Voor het ongelijk teken != mag je ook <> gebruiken.