166.54K
Категория: Базы данныхБазы данных

Сложные групповые операции

1.

Курс «Хранилища данных»
Тема: Сложные групповые
операции
Барабанщиков
Игорь Витальевич

2.

Сложные групповые операции
• Для эффективной обработки данных в СППР
надо обобщать данные транзакций на
различных уровнях.
• Для обобщения данных применяют групповые
операции.
• В языке SQL для выполнения групповых
операций используется инструкция GROUP BY.
• Системы поддержки принятия решений (СППР)
требуют применения более сложных
групповых операций.
2

3.

Задача и решение
Задача:
Вывести месячный объем продаж для каждого
региона.
Решение:
SELECT region, month, SUM(sales)
FROM orders O, region R
WHERE R.region_id = O.region_id
AND year = 2016
GROUP BY region, month
3

4.

Анализ запроса
• Запрос выводит общий объем продаж для
каждой комбинации регион-месяц.
• В более сложных приложениях может
понадобиться выводить:
- подитог для каждого региона для всех
месяцев и итог для всех регионов
- подитог для всех регионов по каждому
месяцу и итог для всех месяцев.
• Таким образом, может возникнуть
необходимость получения подитогов и итогов
нескольких уровней.
4

5.

Использование UNION
• Простой запрос с GROUP BY недостаточен для
порождения итогов и подитогов.
• Надо написать запрос, который возвращает:
- объем продаж за каждый месяц для каждого
региона.
- подитоги для всех месяцев по каждому региону.
- общий объем продаж всех регионов за все месяцы.
• Это можно сделать 3-мя запросами, результаты
которых объединить с помощью UNION ALL.
• Это старый способ.
5

6.

Пример UNION ALL
SELECT R.region, O.month, SUM(O.sales)
FROM oreders O, region R
WHERE R.region_id = O.region_id AND year=2015
GROUP BY region, month
UNION ALL
SELECT R.region, NULL, SUM(O.sales)
FROM oreders O, region R
WHERE R.region_id = O.region_id AND year=2015
GROUP BY region
UNION ALL
SELECT NULL, NULL, SUM(O.sales)
FROM oreders O, region R
WHERE R.region_id = O.region_id AND year=2015
6

7.

Недостатки запроса с UNION
Для выполнения запроса надо:
• выполнить несколько полных сканирований
таблиц (3 – таблицы заказов, 2 – таблицы регионов)
• выполнить несколько операций соединения
таблиц.
• выполнить операции сортировки и слияния
UNION ALL.
Если таблица заказов имеет много строк, то
выполнение запроса займет много времени.
Такие запросы плохо влияют на производительность.
7

8.

Новые групповые операции
В Oracle SQL введены полезные операции,
облегчающие обобщение данных:
• ROLLUP – для вставки в результаты
суммирования итогов и подитогов.
• CUBE – для формирования подитогов для всех
возможных комбинаций группировки столбцов.
• GROUPING – помогает корректно
интерпретировать результаты, генерируемые
ROLLUP и CUBE.
• GROUPING SETS – генерирует суммарную
информацию заданного уровня.
8

9.

Заключение
• Для эффективной
обработки данных в
СППР надо обобщать
данные транзакций
на различных
уровнях.
• Старый способ
выполнения сложных
группировок га
основе UNION не
эффективен.
9
English     Русский Правила