
Ключевые слова cube и rollup
Ключевые слова cube и rollup предназначены для выполнения многомерного анализа данных в одной команде SQL.
В командах SQL они не могут присутствовать одновременно.
С помощью этой конструкции выполняется сверхагрегирование данных.
Обычные функции агрегирования применяются к строкам группы и возвращают единственное значение для всей группы. При использовании ключевых слов cube или rollup происходит вычисление функции агрегирования для значений, возвращаемых для каждой колонки.
cube создает итоговый набор, который показывает сводные показатели для всех комбинаций значений в выбранных колонках.
Каждое сочетание значений столбцов, входящих в секцию group by, порождает совокупность групп. Для каждого неповторяющегося значения столбца из списка группировки cube создает дополнительную запись, в которой столбцу присвоено значение null. Это значение null представляет все значения данного столбца.
Например, пусть имеется таблица с именем Таблица1, содержащая следующие записи:
Столбец 1 |
Столбец 2 |
Столбец 3 |
|
1 |
abc |
1 |
|
1 |
def |
2 |
|
1 |
ghi |
3 |
|
1 |
abc |
4 |
|
2 |
def |
5 |
|
2 |
ghi |
6 |
Далее представлен запрос с with cube и его результат:
SELECT [Столбец 1], [Столбец 2], SUM([Столбец 3])
FROM Таблица1
GROUP BY [Столбец 1], [Столбец 2] WITH CUBE
Результат запроса: |
||
Столбец 1 |
Столбец 2 |
Столбец 3 |
1 |
abc |
5 |
1 |
def |
2 |
1 |
gbi |
3 |
1 |
NULL |
10 |
2 |
def |
5 |
2 |
ghi |
6 |
2 |
NULL |
11 |
NULL |
NULL |
21 |
NULL |
abc |
5 |
NULL |
def |
7 |
NULL |
ghi |
9 |
rollup создает итоговый набор, который демонстрирует сводные показатели для иерархии значений в выбранных колонках.
rollup не возвращает все возможные комбинации значений.
Группировка rollup образуется из столбцов, расположенных справа от значения текущего столбца.
SELECT [Столбец 1], [Столбец 2], SUM([Столбец 3])
FROM Таблица1
GROUP BY [Столбец 1], [Столбец 2] WITH ROLLUP
Результат запроса:
Столбец 1 |
Столбец 2 |
Столбец 3 |
1 |
abc |
5 |
1 |
def |
2 |
1 |
ghi |
3 |
1 |
NULL |
10 |
2 |
def |
5 |
2 |
ghi |
6 |
2 |
NULL |
11 |
NULL |
NULL |
21 |