Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_KL_2010_14.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
28.97 Mб
Скачать

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

4.3.1.Предложение 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 для группы и среднюю стоимость заказа для данной группы.

4.3.2.Предложение having

Если в результирующих наборах данных нужно выдавать агрегацию не по всем группам, а только по тем из них, которые отвечают некоторому условию, после предложения GROUP BY указывают предложение

HAVING <агрегатная функция> <отношение> <значение>

агрегатная функция − одна из функций MIN, MAX, AVG, SUM;

отношение − одна из операций отношения =, <>, <, >, <=, >=;

значение − константа, результат вычисления выражения или единичное значение, возвращаемое вложенным оператором SELECT.

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

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

Пример. Построить запрос, который выводит среднюю стоимость заказа для каждого служащего из числа тех, у кого общая стоимость заказа превышает $30 000?

SELECT ID_SLZH, AVG(PRICE)

FROM ZAKAZY

GROUP BY ID_SLZH

HAVING SUM(PRICE) > 30 000.00

4.3.3.Предложение order by − определение сортировки

Строки результатов запроса, как и строки таблицы базы данных, не имеют определенного порядка. Но включив в инструкцию SELECT предложение ORDER BY, можно отсортировать результаты запроса.

Результирующий набор данных можно отсортировать с помощью предложения

ORDER BY <список_столбцов>

список_столбцов − содержит имена столбцов, по которым будет производиться сортировка. Если указаны два и более столбцов, первый столбец будет использован для глобальной сортировки, второй столбец для сортировки внутри группы, определяемой единым значением первого столбца, и т. д. Например, результаты следующего запроса отсортированы по двум столбцам, REGION, CITY.

Пример. Показать физические объемы продаж для каждого офиса, отсортированные в алфавитном порядке по названиям регионов и в каждом регионе по названиям городов.

SELECT CITY, REGION, SALES

FROM OFFISY

ORDER BY REGION, CITY

В предложении ORDER BY можно выбрать возрастающий или убывающий порядок сортировки. По умолчанию данные сортируются в порядке возрастания. Чтобы сортировать их по убыванию, следует включить в предложение сортировки ключевое слово DESC, как это сделано в следующем примере.

Пример. Показать список офисов, отсортированный по фактическим объемам продаж в порядке убывания.

SELECT CITY, REGION, SALES

FROM OFFISY

ORDER BY SALES DESC

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