Бази даних-20210115T104840Z-001 / Oracle_SQL_5
.pdfУнарные агрегатные функции
Например, AVG (среднее значение)
сфразой DISTINCT, примененная к значениям 1, 1, 1 и 3 выдаст 2, а
при наличии фразы ALL выдаст 1,5.
По умолчанию предполагается фраза
ALL.
Функция COUNT (1)
Имеет 2 формата:
COUNT(*)
COUNT([DISTINCT | ALL] выражение)
Запрос. Информация о скольких преподавателях имеется в базе данных?
SELECT COUNT(*) AS "Количество преподавателей"
FROM TEACHER;
Количество преподавателей
-------------------------
15
В простейший вариант использования COUNT – это подсчет количества всех строк в таблице или тех, которые удовлетворяют определенным условиям. В этом случае используется вариант COUNT(*). Отметим, что так в этом случае подсчитывается количество всех строк, то использование ключевых слов DISTINCT или ALL не допускается.
Функция COUNT (2)
Запрос. Сколько кафедр на факультете информатики?
SELECT COUNT(*) AS "Количество кафедр"
FROM FACULTY f, DEPARTMENT d
WHERE f.FacPK = d.FacFK AND LOWER(f.Name) = 'информатика';
Количество кафедр
-----------------
3
Функция COUNT (3)
Запрос. Сколько различных номеров телефонов содержится в таблице
TEACHER?
SELECT COUNT(DISTINCT Tel) AS
"Количество телефонов"
FROM TEACHER;
Количество телефонов
--------------------
4
Функция SUM (1)
Запрос. Какая суммарная ставка всех ассистентов?
SELECT SUM(Salary)
FROM TEACHER
WHERE LOWER(Post) = 'ассистент';
SUM(SALARY)
-----------
2200
Эта агрегатная функция подсчитывает сумму значений аргумента для всех строк входной таблицы. Аргумент должен иметь числовой тип или тип интервала. Допускается использовать ключевые слова DISTINCT и ALL. В качестве аргумента может выступать имя столбца или выражение над столбцами входной таблицы. Приведем примеры.
Функция 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.