Любой столбец из списка SELECT, не являющийся групповой функцией, должен быть описан предложением GROUP BY.
Предложение WHERE для исключения групп не используется.
Пример.
Вывод названия фильма и средней стоимости проката для каждого наименования, где средняя стоимость проката превышает 40.
SQL> SELECT namef, AVG(stoimost_prok)
From film
3 where AVG(stoimost_prok)>40
4 GROUP BY namef;
where AVG(stoimost_prok)>40
*
ошибка в строке 3:
ORA-00934: групповая функция здесь не разрешена
Вместо этого для ограничения количества групп следует использоватьпредложение HAVING.
SQL> SELECT namef, AVG(stoimost_prok)
From film
GROUP BY namef
4 HAVING AVG(stoimost_prok)>40;
NAMEF AVG(STOIMOST_PROK)
------------------------- -----------------------------------
Ва-банк 42
Звонок 40,3333333
Красотка 42
Предложение HAVING
Предложение HAVING задает условие отбора групп для вывода. Следовательно, на группы накладывается дальнейшее ограничение, основанное на сводной информации.
Если используется предложение HAVING, сервер Oracle выполняет следующие действия:
· Группирует строки.
· Применяет групповую функцию.
· Производит вывод групп, удовлетворяющих условию предложения HAVING.
Пример.
Вывод названия фильма и общей стоимости проката кассет для всех наименований фильмов, со стоимостью проката больше 50. Выходные строки сортируются по стоимости проката.
SQL> SELECT namef, SUM(stoimost_prok) as «Общая стоимость»