Правила выполнения запросов, в котором участвуют агрегатные функции

Таблица результатов запроса, в котором участвуют агрегатные функции, генерируется следующим образом.

1. Берется таблица, указанная в предложении FROM.

2. Если имеется предложение WHERE, применить заданное в нем условие отбора к каждой строке таблицы. Если при этом получается значение TRUE, то текущая строка добавляется в результирующую таблицу, если получается значение FALSE, то строка отбрасывается.

3. Для каждой из оставшихся строк вычислить значение каждого элемента в списке возвращаемых столбцов и создать одну строку таблицы результатов запроса.

Смысл запроса, в котором участвуют агрегатные функции, легче понять, если разбить процесс выполнения на два этапа.

Сначала представим выполнение запроса без агрегатных функций (п.п. 1 - 5 раздела 4.1.5).

Затем представим, как СУБД применяет агрегатные функции к результатам запроса, формируя при этом итоговую строку.

Все агрегатные функции возвращают единственное значение. Функции COUNT, MIN и MAX применимы как к числовым полям, так и к нечисловым полям, тогда как функции SUM и AVG могут применяться только к числовым полям.

Запросы с группировкой

Предложение GROUP BY

Иногда требуется получить агрегированные значения (минимум, максимум, среднее) не по всему результирующему набор данных, а по каждой из входящих в него групп записей, характеризующихся одинаковыми значениями какого-либо столбца. Для применения агрегатных функций предполагается предварительная операция группировки. В чем состоит суть операции группировка. При группировке все множество кортежей отношения разбивается на имеющие одинаковые значения атрибутов, которые заданы в списке группировки.

Эту возможность предоставляет предложение GROUP BY инструкции SELECT. назначение предложения GROUP BY лучше всего можно понять на примере.

Пример. Какова средняя стоимость заказа для каждого сотрудника компании?

SELECT ID_SLZH, AVG(PRICE)

FROM ZAKAZY

GROUP BY ID_SLZH

На логическом уровне запрос выполняется следующим образом:

1. Заказы делятся на группы, по одной для каждого служащего. В каждой группе все заказы имеют одно и то же значение в столбце ID_SLZH.

2. Для каждой группы вычисляется среднее значение столбца PRICE по всем строкам, входящим в группу, и генерируется одна итоговая строка результатов. Эта строка содержит значение столбца ID_SLZH для группы и среднюю стоимость заказа для данной группы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: