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

2.2. Оператор group by

Оператор group by (группировать по) служит для группировки записей по значениям одного или нескольких столбцов. Если в SQL-выражении используется оператор where, задающий фильтр записей, то оператор group by находится и выполняется после него. Для определения, какие записи должны войти в группы, служит оператор having, используемый совместно с group by. Если оператор having не применяется, то груп­пировке подлежат все записи, отфильтрованные оператором where. Если where не используется, то группируются все записи исходной таблицы.

Д опустим, что на основе таблицы о клиентах требу­ется сгруппировать данные о суммах заказов клиентов по регио­нам. Для этого можно воспользоваться следующим SQL-выражением:

SELECT Регион, Сумма_заказа FROM Клиенты

GROUP BY Регион;

На рис. показана результатная таблица на фоне исходной таб­лицы Клиенты. Обратите внимание, что записи с одинаковыми названиями регионов расположены рядом друг с другом (в одной группе).

Чтобы получить таблицу, в которой суммы заказов подытожены по регионам, потребуется использовать итоговую функцию sum() и группировку по регионам:

SELECT Регион, SUM(Сумма_заказа) FROM Клиенты

GROUP BY Регион;

З десь в выражении select указаны обычный столбец таблицы клиенты и итоговая функция SUM(), вычисляющая сумму значе­ний столбца Сумма_заказа. Поскольку группировка задана по столбцу Регион, то функция SUM(Сумма_заказа) вычисляет суммы значений столбца Сумма_заказа для каждого значения столбца Регион. На рис. показана результатная таблица на фоне исходной таблицы клиенты. Обратите внимание, что в этой таб­лице названия регионов не повторяются.

Оператор group by собирает записи в группы и упорядочивает (сортирует) группы по алфавиту (точнее, по ASCII-кодам симво­лов). Это обстоятельство следует иметь в виду перед тем, как принять решение об использовании оператора сортировки order by.

2.3. Оператор having

Оператор having (имеющие, при условии) обычно применяется совместно с оператором группировки group by и задает фильтр записей в группах. Правила его формирования такие же, что и для оператора where.

Предположим, что из таблицы Клиенты требуется выбрать дан­ные о регионах и суммах заказов, сгруппированные по регионам и такие, в которых сумма заказа превышает 500. Иначе говоря, требуется сгруппировать данные с ограничением записей, вхо­дящих в группы. Запрос, выполняющий это задание, имеет вид:

SELECT Регион, Сумма_заказа FROM Клиенты

GROUP BY Регион, Сумма_заказа

HAVING Сумма_заказа > 500;

Результат выполнения этого запроса представлен на рис.

Е сли в SQL-выражении оператора group by нет, то оператор having применяется ко всем записям, возвращаемым оператором where. Если же отсутствует и where, то having действует на все записи таблицы.

2.4. Оператор order by

Оператор order by (сортировать по) применяется для упорядочи­вания (сортировки) записей. Если он используется в запросе, то в самом конце запроса. Этот оператор сортирует строки всей табли­цы или отдельных ее групп (в случае применения оператора group by). Если в выражении запроса оператора group by нет, то опера­тор order by рассматривает все записи таблицы как одну группу.

Вслед за ключевым словом order by указывается столбец, по значениям которого следует произвести сортировку. После имени столбца можно указать ключевое слово, задающее порядок (ре­жим) сортировки:

asc по возрастанию (ascending). Это значение принято по умолчанию, поэтому если необходима сортировка, например, в алфавитном порядке, то специально указывать порядок не требуется;

desc по убыванию (descending).

Если в выражении order by указаны несколько столбцов сорти­ровки, то сначала записи упорядочиваются по значениям первого столбца, затем для каждого значения первого столбца записи упорядочиваются по значениям второго столбца и т. д. Столбцы в списке разделяются, как обычно, запятыми. Таким образом, создается иерархическая система сортировки записей результат­ной таблицы.

В следующем примере данные исходной таблицы клиенты сорти­руются по регионам и по именам клиентов. При этом сортировка по именам клиентов производится по убыванию, т. е. в порядке, противоположном алфавитному.

SELECT * FROM Клиенты

ORDER BY Регион, Имя DESC;