Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
1
Добавлен:
15.01.2021
Размер:
154.95 Кб
Скачать

Унарные агрегатные функции

Например, 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.