Структуризированный язык запросов (SQL)


Фраза GROUP BY


Мы показали, как можно вычислить массу определенного продукта, поставляемого поставщиками. Предположим, что теперь требуется вычислить общую массу каждого из продуктов, поставляемых в настоящее время поставщиками. Это можно легко сделать с помощью предложения

SELECT ПР, SUM(К_во) FROM Поставки GROUP BY ПР;

Результат показан на рис. 2.3,а.

а) б) в) г)

ПР

90 11150 1230 15370 1370 3250 5170 6220 8150 7200 20 4100 13190 1470 16250 1750 10220

ПСПРЦенаК_во 19-0--0- 39-0--0- 59-0--0- 1111.5050 511-0--0- 611-0--0- 8111.00100 1123.0010 3122.5020 612-0--0- 1152.00170 3151.50200 213.60300 714.2070 23-0--0- 734.00250 . . .

ПР

1370 20 3250 4100 5170 6220 7200 8150 90

10220 11150 1230 13190 1470 15370 16250 1750

ПР

90

11150

1230

1570

1370

3250

570

6140

8150

7200

20

4100

13190

1470

16250

1750

10220

Рис. 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 ПР;




- Начало -  - Назад -  - Вперед -