Базы данных. Основы SQL реляционных баз данных. Копейкин М.В - 95 стр.

UptoLike

Однако имеются специальные синтаксические ограничения по части использования в
условии поиска спецификаций столбцов таблиц из раздела FROM данного табличного
выражения. Эти ограничения следуют из того, что условие поиска раздела HAVING
задает условие на целую группу, а не на индивидуальные строки.
Поэтому в арифметических выражениях предикатов, входящих в условие выборки
раздела HAVING, прямо можно использовать
только спецификации столбцов, указанных
в качестве столбцов группирования в разделе GROUP BY. Остальные столбцы можно
специфицировать только внутри спецификаций агрегатных функций COUNT, SUM,
AVG, MIN и MAX, вычисляющих в данном случае некоторое агрегатное значение для
всей группы строк. Аналогично обстоит дело с подзапросами, входящими в предикаты
условия выборки раздела HAVING: если в подзапросе используется характеристика
текущей группы, то
она может задаваться только путем ссылки на столбцы
группирования.
Пусть запрос вида (в качестве базовой таблицы см. рис. 4.22):
SELECT Ид_сотр, Дата, MAX ((Сумма))
FROM Ведомость1
GROUP BY Ид_сотр, Дата;
необходимо уточнить тем, чтобы были показаны только выплаты, превышающие 1000.
Однако по стандарту агрегатную функцию в предложении WHERE использовать
запрещено (если вы не используете подзапрос,
описанный позже), потому что предикаты
оцениваются в терминах одиночной строки, а агрегатные функции оцениваются в
терминах группы строк.
Следующее предложение будет неправильным:
SELECT Ид_сотр, Дата, MAX (Сумма)
FROM Ведомость1
WHERE MAX ((Сумма)) > 1000 GROUP BY Ид_сотр, Дата;
Правильным предложением будет:
SELECT Ид_сотр, Дата, MAX ((Сумма))