Базы данных: SQL
Структуризированный язык запросов (SQL)
2.5.3. Фраза GROUP BY
В.В.Кириллов, Г.Ю.Громов
Мы показали, как можно вычислить массу определенного продукта, поставляемого поставщиками. Предположим, что теперь требуется вычислить общую массу каждого из продуктов, поставляемых в настоящее время поставщиками. Это можно легко сделать с помощью предложения
SELECT ПР, SUM(К_во)
FROM Поставки
GROUP BY ПР;
Результат показан на рис. 2.3,а.
а) | б) | в) | г) |
ПР |
9 | 0 |
11 | 150 |
12 | 30 |
15 | 370 |
1 | 370 |
3 | 250 |
5 | 170 |
6 | 220 |
8 | 150 |
7 | 200 |
2 | 0 |
4 | 100 |
13 | 190 |
14 | 70 |
16 | 250 |
17 | 50 |
10 | 220 |
|
ПС | ПР | Цена | К_во |
1 | 9 | -0- | -0- |
3 | 9 | -0- | -0- |
5 | 9 | -0- | -0- |
1 | 11 | 1.50 | 50 |
5 | 11 | -0- | -0- |
6 | 11 | -0- | -0- |
8 | 11 | 1.00 | 100 |
1 | 12 | 3.00 | 10 |
3 | 12 | 2.50 | 20 |
6 | 12 | -0- | -0- |
1 | 15 | 2.00 | 170 |
3 | 15 | 1.50 | 200 |
2 | 1 | 3.60 | 300 |
7 | 1 | 4.20 | 70 |
2 | 3 | -0- | -0- |
7 | 3 | 4.00 | 250 |
. . . |
|
ПР |
1 | 370 |
2 | 0 |
3 | 250 |
4 | 100 |
5 | 170 |
6 | 220 |
7 | 200 |
8 | 150 |
9 | 0 |
10 | 220 |
11 | 150 |
12 | 30 |
13 | 190 |
14 | 70 |
15 | 370 |
16 | 250 |
17 | 50 |
|
ПР |
9 | 0 |
11 | 150 |
12 | 30 |
15 | 70 |
1 | 370 |
3 | 250 |
5 | 70 |
6 | 140 |
8 | 150 |
7 | 200 |
2 | 0 |
4 | 100 |
13 | 190 |
14 | 70 |
16 | 250 |
17 | 50 |
10 | 220 |
|
Рис. 2.3. Иллюстрации к фразе GROUP BY
Фраза GROUP BY (группировать по) инициирует перекомпоновку указанной во FROM таблицы по группам, каждая из которых имеет одинаковые значения в столбце, указанном в GROUP BY. В рассматриваемом примере строки таблицы Поставки группируются так, что в одной группе содержатся все строки для продукта с ПР = 1, в другой – для продукта с ПР = 2 и т.д. (см. рис. 2.3.б). Далее к каждой группе применяется фраза SELECT. Каждое выражение в этой фразе должно принимать единственное значение для группы, т.е. оно может быть либо значением столбца, указанного в GROUP BY, либо арифметическим выражением, включающим это значение, либо константой, либо одной из SQL-функций, которая оперирует всеми значениями столбца в группе и сводит эти значения к единственному значению (например, к сумме).
Отметим, что фраза GROUP BY не предполагает ORDER BY. Чтобы гарантировать упорядочение по ПР результата рассматриваемого примера (рис. 2.3,в) следует дать запрос
SELECT ПР, SUM(К_во)
FROM Поставки
GROUP BY ПР
ORDER BY ПР;
Наконец, отметим, что строки таблицы можно группировать по любой комбинации ее столбцов. Так, по запросу
SELECT Т, БЛ, COUNT(БЛ)
FROM Заказ
GROUP BY Т, БЛ;
можно узнать коды и количество порций блюд, заказанных отдыхающими пансионата (32 человека) на каждую из трапез следующего дня:
Т | БЛ | COUNT(БЛ) |
1 | 3 | 18 |
1 | 6 | 14 |
1 | 19 | 17 |
1 | 21 | 15 |
... |
Если в запросе используются фразы WHERE и GROUP BY, то строки, не удовлетворяющие фразе WHERE, исключаются до выполнения группирования.
Например, выдать для каждого продукта его код и общий объем возможных поставок, учитывая временную недееспособность поставщика с ПС=2:
SELECT ПР, SUM(К_во)
FROM Поставки
WHERE ПС <> 2
GROUP BY ПР;
Результат, приведенный на рис. 2.3,г, отличается от результата (рис. 2.3,а) аналогичного запроса для всех поставщиков объемом поставок продуктов с кодами 15, 5 и 6.
Назад | Содержание | Далее
При перепечатке любого материала
с сайта, видимая ссылка на источник www.warayg.narod.ru
и все имена, ссылки авторов обязательны.
© 2005
|