Similar presentations:
Сложные групповые операции
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 ALLSELECT 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