В примере на рисунке:
-
Предложение
GROUP BY
выводит суммарные оклады для каждой должности в подразделении для тех подразделений, идентификатор которых меньше 60.
-
В примере оператор ROLLUP выводит:
-
суммарный оклад для каждого подразделения, идентификатор которого меньше 60;
-
суммарный оклад для всех подразделений, идентификатор которых меньше 60, независимо от идентификаторов должностей.
-
В данном примере 1 показывает группу, для которой итог подводится и по столбцу DEPARTMENT_ID
, и по столбцу JOB_ID
, 2 показывает группу, для которой итог подводится только по столбцу DEPARTMENT_ID
, а 3 – общий итог.
Оператор ROLLUP
создает промежуточные итоги, сворачиваемые из самого подробного уровня в общий итог, следуя списку группирований, определенному в предложении GROUP BY
.
Сначала этот оператор рассчитывает стандартные агрегированные значения для групп, заданных в предложении GROUP BY
(в данном примере сумму окладов, сгруппированных по каждой должности в подразделении). Затем оператор постепенно создает промежуточные итоги более высокого уровня, двигаясь справа налево по списку группируемых столбцов. (В данном примере вычисляется сумма окладов для каждого подразделения, а затем рассчитывается сумма окладов для всех подразделений.)
-
При заданных n выражениях в операторе
ROLLUP
предложенияGROUP BY
операция приводит к n + 1 (в данном случае 2 + 1 = 3) группированиям. -
Строки, основанные на значениях первых n выражений, называются строками или обычными строками, а другие строки называются строками суперагрегатов.
Далее: Ранжирование строк с помощью псевдостолбца LEVEL