Описание слайда:
HAVING — необязательный (опциональный) параметр оператора SELECT для указания условия на результат агрегатных функций (MAX, SUM, AVG, …). HAVING аналогичен WHERE за исключением того, что строки отбираются не по значениям столбцов, а строятся из значений столбцов, указанных в GROUP BY, и значений агрегатных функций, вычисленных для каждой группы, образованной GROUP BY . Иными словами, WHERE предназначен для фильтрации по полям, а HAVING – для фильтрации по группам
HAVING — необязательный (опциональный) параметр оператора SELECT для указания условия на результат агрегатных функций (MAX, SUM, AVG, …). HAVING аналогичен WHERE за исключением того, что строки отбираются не по значениям столбцов, а строятся из значений столбцов, указанных в GROUP BY, и значений агрегатных функций, вычисленных для каждой группы, образованной GROUP BY . Иными словами, WHERE предназначен для фильтрации по полям, а HAVING – для фильтрации по группам
Необходимо, чтобы в SELECT были заданы только требуемые в выходном потоке столбцы, перечисленные в GROUP BY и/или агрегированные значения. Распространённая ошибка — указание в SELECT столбца, пропущенного в GROUP BY. Если параметр GROUP BY в SELECT не задан, HAVING применяется к «группе» всех строк таблицы, полностью дублируя WHERE (допускается не во всех реализациях стандарта SQL). Например, мы хотим получить людей, у которых суммарное количество средств превышает 4 тысячи + вывести средний показатель дохода по таким людям:
SELECT person, AVG(amount) AS my_avg
FROM sales2005
GROUP BY person
HAVING SUM(amount) > 4000