HAVING Clause: Functions
Module: Aggregate Functions & Grouping
-- Basic HAVING
SELECT
department,
COUNT(*) AS employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;
-- WHERE + GROUP BY + HAVING
SELECT
department,
AVG(salary) AS avg_salary
FROM employees
WHERE hire_date >= '2020-01-01'
GROUP BY department
HAVING AVG(salary) > 60000;
-- Multiple HAVING conditions
SELECT
department,
COUNT(*) AS count,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING COUNT(*) > 5
AND AVG(salary) > 50000;
HAVING filters groups after GROUP BY
HAVING can use aggregate functions
WHERE filters rows before GROUP BY
WHERE cannot use aggregate functions
HAVING requires GROUP BY (usually)
Multiple conditions with AND/OR
Core references in this topic include GROUP BY, HAVING, COUNT. Learn what each one does, when to use it, and the execution or engine rules that matter.
GROUP BY
Collects rows into groups so aggregate functions can compute one result per group.
GROUP BY department_id
HAVING
Filters groups after aggregation has been computed.
HAVING COUNT(*) > 5
COUNT
Counts rows or non-NULL values depending on the argument.
COUNT(*)