SQL HAVING clause

Here is a clear, practical, and complete guide to the SQL HAVING clause, including examples and key differences from WHERE.
What the SQL HAVING clause Does
HAVING filters grouped/aggregated results after GROUP BY is applied.
It is similar to WHERE, but:
WHERE filters rows BEFORE grouping
HAVING filters groups AFTER aggregation
Basic Syntax
Simple Examples
1. Departments with more than 10 employees
2. Products with total sales above $1,000
3. Classes where the average score is below 70
Using HAVING Without GROUP BY
Most databases allow HAVING even without GROUP BY:
Useful when you want to filter by an aggregate without grouping.
Combine WHERE + HAVING (Best Practice)
Use WHERE first to reduce data before grouping.
Example: Count high-value orders per customer
Key Difference: WHERE vs HAVING
| Clause | Filters | Can use aggregates? | Example |
|---|---|---|---|
| WHERE | Before grouping | No | WHERE price > 100 |
| HAVING | After grouping | Yes | HAVING SUM(sales) > 1000 |
Real-World Examples
Find customers who spent over $10,000 total
Find stores with more than 3 employees
Find categories where the average product price is above $30
Performance Tips
- Use
WHEREto filter rows early — boosts performance - Use
HAVINGonly for aggregated conditions - Index columns used in
WHEREfor best performance - Avoid unnecessary
HAVINGclauses
