T-SQL Tutorial

T-SQL HAVING operator


The SQL Server HAVING operator is used in conjunction with the GROUP BY clause to filter the results of an aggregation function based on a condition. The HAVING operator is similar to the WHERE clause, but it is used specifically for filtering aggregated data.

In SQL Server, aggregation functions such as COUNT, SUM, AVG, MIN, and MAX are used to perform calculations on groups of rows. The GROUP BY clause is used to group the data based on one or more columns, and the result of the aggregation function is calculated for each group.

The HAVING operator is then used to filter the results based on a condition that is applied to the aggregated data. This condition can be any valid expression that evaluates to a Boolean value, such as an arithmetic expression, a comparison, or a logical operator.


Syntax

The syntax for the HAVING operator is as follows:

SELECT column_name(s), aggregation_function(column_name)
FROM table_name
GROUP BY column_name(s)
HAVING condition;


Example

For example, suppose we have a table named "Sales" that contains data about the sales of various products in different regions. We want to find the total sales for each region, but we only want to include regions where the total sales are greater than $10,000. We can use the following SQL statement:

SELECT Region, SUM(SalesAmount) AS TotalSales
FROM Sales
GROUP BY Region
HAVING SUM(SalesAmount) > 10000;

This statement will group the sales data by region and calculate the total sales for each region. The HAVING operator will then filter the results to only include regions where the total sales are greater than $10,000.

It is important to note that the HAVING operator is only used with the GROUP BY clause and cannot be used without it. Additionally, the HAVING operator is applied after the GROUP BY clause, so it can only be used to filter aggregated data.


Example 2

CONTRACT_IDCUSTOMER_IDAMOUNT
11400
22500
33700
411000
521200
64900
732000
821500

SELECT c.customer_id, c.amount
   FROM contracts c
  WHERE c.amount < 2500
GROUP BY c.customer_id, c.amount
HAVING MIN(c.amount) > 1000 ;

Customer_IdAmount
21200
32000
21500

In summary, the SQL Server HAVING operator is a powerful tool for filtering aggregated data based on a condition.