Geek Slack

Getting Started with SQL Server
About Lesson


SQL HAVING Clause


SQL HAVING Clause

The HAVING clause was added to SQL because the WHERE keyword could not be used with aggregate functions.

The HAVING clause is used to filter records that work on summarized GROUP BY results.

Syntax

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);

Example: HAVING with COUNT()

SELECT country, COUNT(*) as num_customers
FROM customers
GROUP BY country
HAVING COUNT(*) > 1;

This query selects the number of customers in each country having more than one customer.

Sample Table

Consider the following customers table:

| id | name         | country    |
|----|--------------|------------|
| 1  | John Doe     | USA        |
| 2  | Jane Smith   | USA        |
| 3  | Mike Johnson | Canada     |
| 4  | Emily Davis  | USA        |
| 5  | David Brown  | Canada     |

Result of HAVING

| country    | num_customers |
|------------|---------------|
| USA        | 3             |
| Canada     | 2             |

The result shows countries with more than one customer.

Example: HAVING with SUM()

SELECT country, SUM(order_amount) as total_sales
FROM orders
GROUP BY country
HAVING SUM(order_amount) > 300;

This query selects the total sales amount in each country with sales greater than 300 from the orders table.

Sample Table

Consider the following orders table:

| id | customer_id | country    | order_amount |
|----|--------------|------------|--------------|
| 1  | 1            | USA        | 100          |
| 2  | 2            | USA        | 200          |
| 3  | 3            | Canada     | 150          |
| 4  | 4            | USA        | 300          |
| 5  | 5            | Canada     | 250          |

Result of HAVING

| country    | total_sales |
|------------|-------------|
| USA        | 600         |

The result shows countries with total sales greater than 300.

Example: HAVING with AVG()

SELECT country, AVG(order_amount) as avg_sales
FROM orders
GROUP BY country
HAVING AVG(order_amount) > 200;

This query selects the average sales amount in each country with an average sales amount greater than 200.

Result of HAVING with AVG()

| country    | avg_sales |
|------------|-----------|
| USA        | 200       |
| Canada     | 200       |

The result shows countries with an average sales amount greater than 200.

Join the conversation