User Tools

Site Tools


conditions_on_aggregates_in_sql

Conditions on aggregates in SQL

You cannot apply a “where” condition to an aggregate in SQL. :-( For example, this does not work:

SELECT CustID, SUM(OrderAmt)
FROM Orders
GROUP BY CustID
WHERE SUM(OrderAmt) > 100  -- Doesn't work

There are a couple of ways to deal with this.

First, there’s the “having” clause, which specifically handles this requirement:

SELECT CustID, SUM(OrderAmt)
FROM Orders
GROUP BY CustID
HAVING SUM(OrderAmt) > 100

If the “having” clause doesn’t work for you, or you’d just prefer not to use it, you can also do some nested selecting and accomplish the same thing:

SELECT * FROM (
  SELECT CustID, SUM(OrderAmt) AS OrderSum
  FROM Orders
  GROUP BY CustID
) AS OrderGrp
WHERE OrderGrp.OrderSum > 100
conditions_on_aggregates_in_sql.txt · Last modified: 2023/07/14 12:45 by jimc