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