HAVING

HAVING

Если мы хотим отфильтровать результат агрегации (например, получившеюся сумму продаж), то у нас не получится это сделать в 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:

  1. Она используется только для фильтрации результатов агрегации, для остальных случаев используется WHERE
  2. HAVING пишется после GROUP BY.
  3. В HAVING недопустимо писать alias, будет возникать ошибка. То есть, в нашем примере, вместо total_qt, мы можем написать только SUM(Quantity*UnitPrice).
  4. В HAVING также можно перечислить несколько условий через AND или OR.
  5. Как и в WHERE, в HAVINGможно фильтровать, но не выводить это в SELECT.