Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SEM5_6_Запросы_Урок1.doc
Скачиваний:
2
Добавлен:
19.11.2019
Размер:
90.11 Кб
Скачать

Агрегирование данных Групповые функции

В большинстве современных СУБД есть возможность использовать так называемые групповые функции (group functions), позволяющие анализировать сразу группы записей. Под группой записей понимается любой набор записей, имеющих что-то общее – например, записи, относящиеся к одному товару, одному отделу или одному временному интервалу. В операторе SELECT при помощи параметра GROUP BY можно определить состав групп, после чего при помощи групповых функций подсчитать количество записей, вошедших в группу, подсчитать итоговую сумму, а также минимальное, максимальное или среднее значение для каждой группы. Если параметр GROUP BY в запросе не указан, то группой записей считается все строки интересующей таблицы.

COUNT

Функция возвращает количество записей в группе. Возможно три варианта использования функции COUNT:

COUNT(*) – подсчет количества записей в группе;

COUNT(поле) – подсчет количества отличных от NULL значений в указанном поле записей группы;

COUNT(DISTINCT поле) – подсчет количества уникальных отличных от NULL значений в указанном поле записей группы.

Примеры использования функции COUNT:

-- подсчет количества строк в таблице Students

SELECT COUNT(*) FROM Student s;

-- подсчет количества всех различных фамилий студентов

SELECT COUNT(DISTINCT L_name) FROM Students;

SUM

Функция SUM возвращает суммарное значение для группы.

-- подсчет суммарного значения риска

SELECT SUM(Risk) FROM Hobby;

MAX

Функция MAX возвращает максимальное значение для группы.

-- подсчет максимальной даты рождения среди студентов, т. е. поиск самого молодого студента

SELECT MAX(B_Data) FROM Students;

MIN

Функция MIN возвращает минимальное значение для группы.

  • поиск самого “старого” студента

SELECT MIN(B_Data) FROM Students;

AVG

Функция AVG возвращает среднее значение для группы.

-- подсчет средней степени риска для хобби, названия которых заканчиваются на «ов»

SELECT AVG(Risk) FROM Hobbys WHERE Hobby_name Like ‘%ов’;

Использование параметров group by и having

В предыдущих примерах в качестве группы рассматривался весь набор записей, полученный в результате выполнения запроса. При помощи параметра GROUP BY оператора SELECT можно указать способ разбиения полученного в результате выполнения запроса набора записей на группы. В параметре GROUP BY задается столбец (или столбцы), по значениям которого будет производиться группировка. При выполнении оператора SELECT, в котором присутствует параметр GROUP BY, СУБД проанализирует значение указанного столбца во всех строках, отобранных в результате выполнения запроса. Все строки, где значение указанного в параметре GROUP BY столбца одно и тоже, попадут в одну группу. После этого для каждой из групп будет вычислена указанная в параметре SELECT групповая функция. Например:

-- вывод номеров групп и количества студентов в каждой группе

SELECT N_gr, COUNT(N_gr) as количество_студентов

FROM Students

GROUP BY N_gr

ORDER BY N_gr DESC;

В данном запросе СУБД сначала выделит группы записей, относящиеся к разным группам (в зависимости от значения столбца N_gr) и для каждой получившейся группы посчитает количество записей.

Параметр HAVING оператора SELECT используется для исключения групп из результирующего набора записей на основе результатов выполнения групповых функций. После параметра HAVING также как и после параметра WHERE указывается условие фильтрации, но в отличие от параметра WHERE, условия которого используются для фильтрации отдельных строк, условия, указанные в параметре HAVING используются для фильтрации целых групп. Например:

-- отбор групп, в которых количество студентов более 12.

SELECT N_gr, COUNT(N_gr) as количество_студентов

FROM Students

GROUP BY N_gr

HAVING COUNT(N_gr) > 12;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]