Функция SUM (2)
Запрос. Сколько профессоров в ВУЗе и какова суммарная их зарплата?
SELECT COUNT(*), SUM( Salary + Rise) FROM
TEACHER
WHERE UPPER(Post) = 'ПРОФЕССОР';
COUNT(*) SUM(SALARY+RISE)
---------- -----------------
3 4660
Функция AVG
Запрос. Какое количество аудиторий в корпусе 6, их суммарная и средняя вместимость:
SELECT COUNT(*) AS "К-во ауд в к.6", SUM(Seats) AS "Их общая вместимость", AVG(Seats) AS "Их средняя вместимость"
FROM ROOM
WHERE Building = '6';
К-во ауд в к.6 Их общая вместимость Их средняя вместимость
---------------- |
----------------------- |
------------------------ |
4 |
162 |
40,5 |
Функции MIN и MAX (1)
Запрос. Какой максимальный фонд финансирования среди факультетов?
SELECT MAX(Fund)
FROM FACULTY;
MAX(FUND)
----------
27000
Функции MIN и MAX (2)
Обратите внимание, что если бы вы захотели вместе с максимальным фондом получить и название этого факультета:
SELECT Name, MAX(Fund)
FROM FACULTY;
SELECT Name, MAX(Fund)
*
Ошибка в строке 1: ORA-00937: групповая функция не является одногруппной
Напоминаем еще раз, при отсутствии фразы GROUP BY во фразе SELECT нельзя одновременно использовать имена столбцов (выражения над столбцами) и агрегатные функции !!!
Запросы с группировкой строк
Фраза GROUP BY позволяет объединить множество строк в группы по признаку равенства значений одного или нескольких столбцов (выражений над столбцами). В этом случае агрегатные функции, используемые во фразе SELECT, действуют не на всем результирующем отношении, а в пределах каждой группы.
Общий синтаксис фразы следующий:
GROUP BY выражение_ 1 [, выражение_2]...
Описанные на предыдущем уроке агрегатные функции применялись ко всей таблице. Тем самым они предоставляют возможность создавать итоговые значения по всей таблице. Тем не менее, при построении многих отчетов появляется необходимость в формировании промежуточных итоговых значений, которые затрагивают информацию не по всей таблице, а по ее некоторым частям. Именно для этого предназначена фраза GROUP BY.