Если мы хотим отфильтровать результат агрегации (например, получившеюся сумму продаж), то у нас не получится это сделать в WHERE
. В таком случае используется конструкция having, которая следует за GROUP BY
Давайте, используя таблицу supermarket_sales
, посчитаем сумму продаж в разрезе ProductId
и Date
и добавим в нее дополнительное условие - сумма продаж должна быть больше 100.
Запрос будет выглядеть так:
select
ProductId,
Date,
sum(Quantity*UnitPrice) as total_qt
from
supermarket_sales
group by
Date,
ProductId
having
sum(Quantity*UnitPrice) > 100
order by
ProductId,
Date
Что важно знать про HAVNG
:
WHERE
HAVING
пишется после GROUP BY
.HAVING
недопустимо писать alias, будет возникать ошибка. То есть, в нашем примере, вместо total_qt
, мы можем написать только SUM(Quantity*UnitPrice)
.HAVING
также можно перечислить несколько условий через AND
или OR
.WHERE
, в HAVING
можно фильтровать, но не выводить это в SELECT
.