WHERE фильтрует строки до группировки и не может использовать агрегатные функции. HAVING фильтрует группы после GROUP BY и может использовать COUNT, SUM, AVG и т.д. Порядок выполнения: FROM - WHERE - GROUP BY - агрегаты - HAVING - ORDER BY - LIMIT.
SELECT department_id, COUNT(*) FROM employees
WHERE salary > 50000 GROUP BY department_id HAVING COUNT(*) > 5