Оператор HAVING
Вы уже хорошо освоили группировку, поэтому разобрать такой запрос будет нетрудно:
SQL
Данные сгруппировали по идентификатору покупателя и посчитали сумму выручки на каждого клиента. А что делать, если после группировки нужно оставить только те записи, в которых значение
SUM(total) больше 41?Если нужно получить срез данных после группировки, используют оператор
HAVING. HAVING похож на оператор WHERE, но с отличием: HAVING всегда идёт после GROUP BY. У этих операторов есть и другие отличия — сравните с помощью таблицы.На сочетании с агрегирующими функциями нужно остановиться отдельно. Оператором
WHERE можно отобрать нужные записи и применить к ним агрегирующую функцию, например SUM. SQL
Использовать агрегирующую функцию в условии после оператора
WHERE нет смысла, ведь условие отбирает записи, которые станут аргументом агрегирующей функции. В случае с оператором HAVING наоборот — условие должно включать агрегирующие функции, иначе от такого среза будет немного пользы.Сгруппировав данные по пользователям, можно применить оператор
HAVING, чтобы отфильтровать нужные записи. Результат отсортирован по убыванию суммы выручки. SQL
А если добавить ещё одно условие и отобрать заказы по средней выручке, но само поле со средней выручкой не выводить?
Запрос сработает, и в результате появится такая таблица: