Пример ROLLUP

В примере на рисунке:

12-8-5120374

  • Предложение 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

Related Posts