SQLLab
АгрегатыНачальный

HAVING

Фильтрует группы после GROUP BY. В отличие от WHERE, может использовать агрегатные функции.

Синтаксис
SELECT col, AGG(col2) FROM table GROUP BY col HAVING AGG(col2) > value;

Объяснение

HAVING применяется после GROUP BY и может содержать агрегатные функции. WHERE — до GROUP BY, агрегаты там недоступны. Правило: если условие не использует агрегат — лучше вынести его в WHERE для производительности.

Пример

-- Пользователи с более чем 5 заказами на сумму > 10000
SELECT user_id, COUNT(*) AS cnt, SUM(total) AS total
FROM orders
GROUP BY user_id
HAVING COUNT(*) > 5 AND SUM(total) > 10000;