Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы и банки данных.doc
Скачиваний:
10
Добавлен:
12.11.2019
Размер:
745.98 Кб
Скачать

2.Суммирование данных с помощью функций агрегирования (групповых функций).

Функции агрегирования предназначены для расчета значений по группам строк таблиц. Стандарт SQL определяет следующие функции:

  • COUNT – определяет количество строк или количество непустых значений поля.

  • SUM – сумма значений поля.

  • AVG – среднее значение поля

  • MIN – минимальное значение поля

  • MAX – максимальное значение поля.

Как видно, таких функций меньше, чем обеспечивает, к примеру, Access.

Функции агрегирования указываются вместо имен полей в операторы SELECT, а имена полей задаются как параметры функции. Для SUMM и AVG, поля-параметры должны быть числовыми. Для COUNT, MIN, MAX – как числовые так и символьные поля-параметры.

Пример: Получить среднюю оценку студента с кодом «003».

AVG(ocen)

3

SELECT AVG(ocean)

FROM оценка

WHERE snum= “003”;

С функцией COUNT могут быть использованы специальные атрибуты:

COUNT (*) – количество строк в таблице

Пример:

SELECT COUNT(*) FROM студент; //результат – 4.

Пример:

SELECT COUNT (spdp) FROM студент; // результат – 3.

Так же можно задать количество неповторяющихся значений поля:

COUNT (DISTINCT имя_поля);

Пример:

SELECT COUNT (DISTINCT opnum)

FROM оценка; // результат – 2.

Предложение GROUP BY позволяет определить подмножество значений одного поля в терминах другого поля и применить функцию агрегирования к полученному подмножеству. В предложении GROUP BY перечисляются имена полей, при одинаковых значения которых, записи объединяются в подмножества.

Пример: Получить суммарный балл студента.

osnum

оценка

001

10

002

4

003

9

SELECT osnum, SUM (ocen)

FROM оценка GROUP BY osnum;

Пример: Получить средний балл студента у преподавателя.

opnum

osnum

AVG(ocen)

001

001

5

001

002

4

001

003

3

003

001

5

003

003

3

SELECT opnum, osnum, AVG(ocen)

FROM оценка GROUP BY opnum, osnum;

При использовании GROUP BY может потребоваться наложить условия на включение записей по группам в результирующую таблицу.

Пример: Получить сведения о студентах, у кот. Средний балл не ниже 4.

SELECT osnum, AVG(ocen)

FROM оценка

WHERE AVG(ocen) >=4

GROUP BY osnum;

Запрос такого вида является некорректным, т.к. применять функции агрегирования в предложении WHEREнельзя, т.к. условие применяется для каждой строки, а не для группы строк.

В данном случае следует применить предложение

osnum

AVG(ocen)

001

5

002

4

SELECT osnum, AVG(ocen)

FROM оценка

GROUP BY osnum

HAVING AVG(ocen) >=4;

Тема 7.

1. Форматирование выходных данных запросов.

2. Соединение таблиц.

3. Вложенные подзапросы.

4. Связанные подзапросы. Оператор EXISTS.

5. Вложенные и связанные подзапросы. Операторы ANY, ALL, SOME