Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML. Токмаков Г.П. - 90 стр.

UptoLike

Составители: 

90
4.3. ЗАПРОСЫ С ГРУППИРОВКОЙ
4.3.1. П
РЕДЛОЖЕНИЕ GROUP BY
Иногда требуется получить агрегированные значения (минимум, максимум,
среднее) не по всему результирующему набор данных, а по каждой из входящих в
него групп записей, характеризующихся одинаковыми значениями какого-либо
столбца. Для применения агрегатных функций предполагается предварительная
операция группировки. В чем состоит суть операции группировка? При группи-
ровке все множество кортежей отношения
разбивается на имеющие одинаковые
значения атрибутов, которые заданы в списке группировки.
Эту возможность предоставляет предложение
GROUPBY инструкции SELECT.
Назначение предложения
GROUPBY лучше всего можно понять на примере.
Пример.
Какова средняя стоимость заказа для каждого сотрудника ком-
пании?
SELECTID_SLZH,AVG(PRICE)
FROMZAKAZY
GROUPBYID_SLZH
На логическом уровне запрос выполняется следующим образом:
1. Заказы делятся на группы, по одной для каждого служащего. В каждой
группе все заказы имеют одно и то же значение в столбце
ID_SLZH.
2. Для каждой группы вычисляется среднее значение столбца
PRICE по всем
строкам, входящим в группу, и генерируется одна итоговая строка результатов.
Эта строка содержит значение столбца
ID_SLZH для группы и среднюю стои-
мость заказа для данной группы.
4.3.2. П
РЕДЛОЖЕНИЕ HAVING
Если в результирующих наборах данных нужно выдавать агрегацию не по
всем группам, а только по тем из них, которые отвечают некоторому условию,
после предложения
GROUPBY указывают предложение
HAVING<агрегатнаяфункция><отношение><значение>
агрегатнаяфункция
одна из функций MIN, MAX, AVG, SUM;
отношение одна из операций отношения =, <>, <, >, <=, >=;
значение константа, результат вычисления выражения или единичное
значение, возвращаемое вложенным оператором
SELECT.
Таким образом, после
HAVING указываются условия, которые отличаются от
условий, определяемых в предложении
WHERE, одним важным обстоятельством:
в них обязательно должна быть указана одна из агрегатных функций, в то время
как в предложении
WHERE такие функции указывать нельзя.
Агрегатные функции могут применяться как в выражении вывода резуль-
татов строки
SELECT, так и в выражении условия обработки сформированных
групп
HAVING. В этом случае каждая агрегатная функция вычисляется для каж-
дой выделенной группы. Значения, полученные при вычислении агрегатных
функций, могут быть использованы для вывода соответствующих результатов
или для условия отбора групп.