Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы новые по БД на экзамен.docx
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
109.83 Кб
Скачать

Фраза group by

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

Это можно легко сделать с помощью предложения:

SELECT ПР, SUM(К_во)

FROM Поставки

GROUP BY ПР;

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

+-------------------------------------------------------+

¦ а) б) в) г) ¦

¦ ПР ПС ПР Цена К_во ПР ПР ¦

¦ -- ---- -- -- ----- ---- -- ---- -- ---- ¦

¦ 9 0 1 9 -0- -0- 1 370 9 0 ¦

¦ 11 150 3 9 -0- -0- 2 0 11 150 ¦

¦ 12 30 5 9 -0- -0- 3 250 12 30 ¦

¦ 15 370 1 11 1.50 50 4 100 15 70 ¦

¦ 1 370 5 11 -0- -0- 5 170 1 370 ¦

¦ 3 250 6 11 -0- -0- 6 220 3 250 ¦

¦ 5 170 8 11 1.00 100 7 200 5 70 ¦

¦ 6 220 1 12 3.00 10 8 150 6 140 ¦

¦ 8 150 3 12 2.50 20 9 0 8 150 ¦

¦ 7 200 6 12 -0- -0- 10 220 7 200 ¦

¦ 2 0 1 15 2.00 170 11 150 2 0 ¦

¦ 4 100 3 15 1.50 200 12 30 4 100 ¦

¦ 13 190 2 1 3.60 300 13 190 13 190 ¦

¦ 14 70 7 1 4.20 70 14 70 14 70 ¦

¦ 16 250 2 3 -0- -0- 15 370 16 250 ¦

¦ 17 50 7 3 4.00 250 16 250 17 50 ¦

¦ 10 220 . . . 17 50 10 220 ¦

+-------------------------------------------------------+

Рис. 2.6. Иллюстрации к фразе GROUP BY

Фраза GROUP BY (группировать по) инициирует перекомпоновку указанной во FROM таблицы по группам, каждая из которых имеет одинаковые значения в столбце, указанном в GROUP BY. В рассматриваемом примере строки таблицы Поставки группируются так, что в одной группе содержатся все строки для продукта с ПР=1, в другой - для продукта с ПР=2 и т.д. (см. рис. 2.6,б). Далее к каждой группе применяется фраза SELECT. Каждое выражение в этой фразе должно принимать единственное значение для группы, т.е. оно может быть либо значением столбца, указанного в GROUP BY, либо арифметическим выражением, включающим это значение, либо константой, либо одной из стандартных функций, которая оперирует всеми значениями столбца в группе и сводит эти значения к единственному значению (например, сумме).

Отметим, что фраза GROUP BY не предполагает ORDER BY. Чтобы гарантировать упорядочение по ПР результата рассматриваемого примера (рис. 2.6,в) следует дать запрос

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.6,г, отличается от результата (рис. 2.6,а) аналогичного запроса для всех поставщиков объемом поставок продуктов с кодами 15, 5 и 6.