Edit

Share via


SELECT - HAVING clause (Transact-SQL)

Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL analytics endpoint in Microsoft Fabric Warehouse in Microsoft Fabric SQL database in Microsoft Fabric

Specifies a search condition for a group or an aggregate. You can use HAVING only with the SELECT statement. Typically, you use HAVING with a GROUP BY clause. When you don't use GROUP BY, there's an implicit single, aggregated group.

Transact-SQL syntax conventions

Syntax

[ HAVING <search condition> ]

Arguments

<search_condition>

Specifies one or more predicates for groups and aggregates that the groups need to meet. For more information about search conditions and predicates, see Search condition.

You can't use the text, image, and ntext data types in a HAVING clause.

Examples

The code samples in this article use the AdventureWorks2025 or AdventureWorksDW2025 sample database, which you can download from the Microsoft SQL Server Samples and Community Projects home page.

A. Retrieve total for each sales order

The following example uses a HAVING clause to retrieve the total for each SalesOrderID from the SalesOrderDetail table that exceeds $100000.00.

USE AdventureWorks2025;
GO

SELECT SalesOrderID,
       SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING SUM(LineTotal) > 100000.00
ORDER BY SalesOrderID;

Examples: Azure Synapse Analytics and Analytics Platform System (PDW)

B. Retrieve total sales exceeding a given value

The following example uses a HAVING clause to retrieve the total SalesAmount that exceeds 80000 for each OrderDateKey from the FactInternetSales table.

-- Uses AdventureWorks
SELECT OrderDateKey,
       SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING SUM(SalesAmount) > 80000
ORDER BY OrderDateKey;