- •Тема 5. Применение агрегатных функций и вложенных запросов в операторе выбора Содержание
- •Тема 5. Применение агрегатных функций и вложенных запросов в операторе выбора 1
- •Пример1.Группировка
- •Пример 2. Функции count Пример 2.1.
- •Пример 2.2.
- •Пример 2.3.
- •Пример 2.4.
- •Пример 2.5
- •Пример 3. Функция sum
- •Пример 3.1.
Пример 2.3.
Можно применять агрегатные функции также и без операции предварительной группировки, в этом случае все отношение рассматривается как одна группа и для этой группы можно вычислить одно значение на группу.
Обратимся к базе данных "Сессия" (таблицы R1, R2, R3).
R1 = (ФИО, Дисциплина, Оценка); R2 = (ФИО, Группа); R3 = (Группы, Дисциплина)
R1
ФИО |
Дисциплина |
Оценка |
Петров Ф. И. |
Базы данных |
5 |
Сидоров К. А. |
Базы данных |
4 |
Миронов А. В. |
Базы данных |
2 |
Степанова К. Е. |
Базы данных |
2 |
Крылова Т. С. |
Базы данных |
5 |
Сидоров К. А. |
Теория информации |
4 |
Степанова К. Е. |
Теория информации |
2 |
Крылова Т. С. |
Теория информации |
5 |
Миронов А. В. |
Теория информации |
Null |
Владимиров В.А. |
Базы данных |
5 |
Трофимов П. А. |
Сети и телекоммуникации |
4 |
Иванова Е. А. |
Сети и телекоммуникации |
5 |
Уткина Н. В. |
Сети и телекоммуникации |
5 |
Владимиров В. А. |
Английский язык |
4 |
Трофимов П. А. |
Английский язык |
5 |
Иванова Е. А. |
Английский язык |
3 |
Петров Ф. И. |
Английский язык |
5 |
R2
-
ФИО
Группа
Петров Ф. И.
С-08
Сидоров К. А.
С-08
Миронов А. В.
С-08
Крылова Т. С.
С-08
Владимиров В. А.
П-07
Трофимов П. А.
П-07
Иванова Е. А.
П-07
Уткина Н. В.
П-07
R3
-
Группа
Дисциплина
С-08
Базы данных
С-08
Теория информации
С-08
Английский язык
П-07
Английский язык
П-07
Сети и телекоммуникации
-
Найдем количество успешно сданных экзамены:
Запрос будет выглядеть:
SELECT COUNT(*)
FROM R1
WHERE Оценка>2
-
Найдем количество успешно сданных экзамены по дисциплинам:
Это, конечно, отличается от выбора поля, поскольку всегда возвращается одиночное значение, независимо от того, сколько строк находится в таблице. Аргументом агрегатных функций могут быть отдельные столбцы таблиц. Но для того, чтобы вычислить, например, количество различных значений некоторого столбца в группе, необходимо применить ключевое слово DISTINCT совместно с именем столбца. Вычислим количество различных оценок, полученных по каждой дисциплине:
Запрос будет выглядеть:
SELECT Дисциплина, COUNT(DISTINCT Оценка)
FROM R1
WHERE Оценка IS NOT NULL and Оценка>2
GROUP BY Дисциплина
Результат:
Дисциплина |
COUNT(DISTINCT R1 .Оценка) |
Базы данных |
4 |
Теория информации |
2 |
Сети и телекоммуникации |
3 |
Английский язык |
4 |