Menu

SQL HAVING – A Deep Dive into the SQL HAVING Clause

Let’s discuss about a commonly misunderstood but fundamentally powerful aspect of SQL – the HAVING clause. The HAVING clause, often seen coupled with the GROUP BY clause, is an essential part of your SQL toolbox.

It allows you to filter the results of your queries based on conditions of aggregate functions, offering more nuanced control over your data queries. Let’s unpack it together.

What is the HAVING Clause?

The HAVING clause is used in SQL to filter the results of a GROUP BY clause. While the WHERE clause can filter rows before they are aggregated, the HAVING clause filters the rows after they’ve been grouped and aggregated. This is the key distinction between the WHERE and HAVING clauses in SQL.

Syntax of the HAVING Clause

The syntax of the HAVING clause is as follows

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

In the above syntax:

  • SELECT is used to select data from a database.
  • FROM specifies the table from which the data is selected.
  • WHERE is used to filter the records before the aggregation takes place.
  • GROUP BY groups the rows that have the same values in specified column(s).
  • HAVING is used to filter the aggregated data.
  • ORDER BY is used to sort the data.

Example of the HAVING Clause

Let’s assume we have a table called Orders that looks like this:

| OrderID | Customer | Amount |
|---------|----------|--------|
| 1       | John     | 100    |
| 2       | John     | 200    |
| 3       | Peter    | 150    |
| 4       | Anna     | 300    |
| 5       | Anna     | 50     |
| 6       | Peter    | 400    |

Now, let’s say you want to find customers who’ve spent more than $250 in total. If you try to use the WHERE clause, you’ll quickly find that it doesn’t work because WHERE clause cannot be used with aggregate functions like SUM().

This is where HAVING clause comes to the rescue:

SELECT Customer, SUM(Amount) AS TotalAmount
FROM Orders
GROUP BY Customer
HAVING SUM(Amount) > 250;

The result-set will look something like this:

| Customer | TotalAmount |
|----------|-------------|
| John     | 300         |
| Peter    | 550         |

In the above SQL statement:

  • SELECTextracts the Customer and SUM(Amount) from the Orders table.
  • GROUP BY groups the orders by the Customer column.
  • HAVING filters out customers who’ve spent less than 250 Dollars us with only those who’ve spent more.

The key thing to understand here is that the HAVING clause operates on the results of the grouping and aggregation.

Conclusion

Understanding how to use the HAVING clause in SQL is essential for managing and analyzing your data effectively. It allows you to filter grouped data in a way that the WHERE clause doesn’t, which can be extremely useful when you need to make aggregate comparisons.

Course Preview

Machine Learning A-Z™: Hands-On Python & R In Data Science

Free Sample Videos:

Machine Learning A-Z™: Hands-On Python & R In Data Science

Machine Learning A-Z™: Hands-On Python & R In Data Science

Machine Learning A-Z™: Hands-On Python & R In Data Science

Machine Learning A-Z™: Hands-On Python & R In Data Science

Machine Learning A-Z™: Hands-On Python & R In Data Science