SQL Practice Logo

SQLPractice Online

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(*)