GROUP BY and HAVING

GROUP BY

SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;

HAVING

SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 5000;

HAVING filters groups after aggregation, unlike WHERE which filters rows before aggregation.