Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.Б.Д / лекции / 7БД.doc
Скачиваний:
45
Добавлен:
30.05.2020
Размер:
60.42 Кб
Скачать

3 Пропозиція group

Часто в запитах вимагається формувати проміжні підсумки, що звичайно відображається появою в запиті фрази "для кожного...". Для цієї мети в операторі SELECT використовується пропозиція GROUP. Запит, в якому присутній GROUP, називається групуючим запитом, оскільки в ньому групуються дані, одержані в результаті виконання операції SELECT, після чого для кожної окремої групи створюється єдиний сумарний рядок. Стандарт SQL вимагає, щоб пропозиція SELECT і фраза GROUP були тісно зв'язані між собою. За наявності в операторі SELECT фрази GROUP кожний елемент списку в пропозиції SELECT повинен мати єдине значення для всієї групи. Більш того, пропозиція SELECT може включати тільки наступні типи елементів: імена полів, підсумкові функції, константи і вирази, що включають комбінації перерахованих вище елементів.

Всі імена полів, приведені в списку пропозиції SELECT, повинні бути присутні і у фразі GROUP - за винятком випадків, коли ім'я стовпця використовується в підсумковій функції. Зворотне правило не є справедливим - у фразі GROUP можуть бути імена стовпців, відсутні в списку пропозиції SELECT.

Якщо спільно з GROUP використовується пропозиція WHERE, то воно обробляється першим, а групуванню піддаються тільки ті рядки, які задовольняють умові пошуку.

Стандартом SQL визначено, що при проведенні групування всі відсутні значення розглядаються як рівні. Якщо два рядки таблиці в одному і тому ж групованому стовпці містять значення NULL і ідентичні значення у всій решті непорожніх групованих стовпців, вони поміщаються в одну і ту ж групу.

Приклад 7.9. Обчислити середній об'єм покупок, вчинених кожним покупцем.

SELECT Клієнт.Прізвище, Avg(Операція.Кількість) AS Середня_кількість

FROM Клієнт INNER JOIN Операція N Клиент.КодКлиента=Операція.КодКлиента

GROUP Клієнт.Прізвище

Приклад 7.9. Обчислення середнього об'єму покупок, вчинених кожним покупцем.

Фраза "кожним покупцем" знайшла своє віддзеркалення в SQL-запиті у вигляді пропозиції GROUP Клієнт.Прізвище.

Приклад 7.10. Визначити, на яку суму був проданий товар кожного найменування.

SELECT Товар.Назва Sum(Товар.Ціна*Операція.Кількість) AS Вартість

FROM Товар INNER JOIN Операція

ON Товар.КодТовара=Операція.КодТовара

GROUP Товар.Назва

Приклад 7.10. Визначення, на яку суму був проданий товар кожного найменування.

Приклад 7.11. Підрахувати кількість операцій, здійснених кожною фірмою.

SELECT Клієнт.Фірма, Count(Операція.КодСделки) AS Кількість_операцій

FROM Клієнт INNER JOIN Операція

ON Клиент.КодКлиента=Операція.КодКлиента

GROUP Клієнт.Фірма

Приклад 7.11. Підрахунок кількості операцій, здійснених кожною фірмою.

Приклад 7.12. Підрахувати загальну кількість купленого для кожної фірми товару і його вартість.

SELECT Клієнт.Фірма, Sum(Операція.Кількість) AS Загальна_Кількість Sum(Товар.Ціна*Операція.Кількість) AS Вартість

FROM Товар

INNER JOIN (Клієнт INNER JOIN Операція ON Клиент.КодКлиента=Операція.КодКлиента) ON Товар.КодТовара=Операція.КодТовара

GROUP Клієнт.Фірма

Приклад 7.12. Підрахунок загальної кількості купленого для кожної фірми товару і його вартості.

Приклад 7.13. Визначити сумарну вартість кожного товару за кожний місяць.

SELECT Товар.Назва, Month(Операція.Дата) AS Місяць,

Sum(Товар.Ціна*Операція.Кількість) AS Вартість

FROM Товар INNER JOIN Операція ON Товар.КодТовара=Операція.КодТовара

GROUP Товар.Назва, Month(Операція.Дата)

Приклад 7.13. Визначення сумарної вартості кожного товару за кожний місяць.

Приклад 7.14. Визначити сумарну вартість кожного товару першого сорту за кожний місяць.

SELECT Товар.Назва, Month(Операція.Дата) AS Місяць Sum(Товар.Ціна*Операція.Кількість) AS Вартість

FROM Товар INNER JOIN Операція ON Товар.КодТовара=Операція.КодТовара

WHERE Товар.Сорт="Первый"

GROUP Товар.Назва, Month(Операція.Дата)

Приклад 6.14. Визначення сумарної вартості кожного товару першого сорту за кожний місяць.

Соседние файлы в папке лекции