Пример составных столбцов

Рассмотрим пример:

12-19-1653537

     SELECT department_id, job_id,manager_id, SUM(salary) FROM employees

GROUP BY ROLLUP( department_id,job_id, manager_id);

Этот запрос заставляет сервер Oracle вычислить следующие группирования:

  • (job_id, manager_id)

  • (department_id, job_id, manager_id)

  • (department_id)

  • Общий итог

Если интересуют только конкретные группы, без использования составных столбцов не удастся ограничить вычисления только этими группированиями. Использование составных столбцов позволяет при свертке рассматривать столбцы JOB_ID и MANAGER_ID как единый блок. Столбцы, заключенные в скобки, при вычислении ROLLUP и CUBE рассматриваются как единый блок. Это объединение иллюстрируется примером, приведенным на рисунке.

Заключение столбцов JOB_ID и MANAGER_ID в скобки указывает серверу Oracle рассматривать JOB_ID и MANAGER_ID как один блок, т.е. как составной столбец.

В примере, показанном на рисунке, вычисляются следующие группирования:

  • (department_id, job_id, manager_id)

  • (department_id)

  • ( )

Приведенный пример выводит следующие результаты:

  • суммарный оклад для каждой должности и каждого менеджера (помечено как 1);

  • суммарный оклад для каждого подразделения, каждой должности и каждого менеджера (помечено как 2);

  • суммарный оклад для каждого подразделения (помечено как 3);

  • общий итог (помечено как 4).

Приведенный на рисунке пример также может быть получен следующим образом:

     SELECT department_id, job_id, manager_id, SUM(salary) FROM employees GROUP BY department_id,job_id, manager_id UNION ALL SELECT department_id, TO_CHAR(NULL),TO_NUMBER(NULL), SUM(salary) FROM employees GROUP BY department_id UNION ALL SELECT TO_NUMBER(NULL), TO_CHAR(NULL),TO_NUMBER(NULL), SUM(salary) FROM employees

GROUP BY ();

В отсутствие оптимизатора, который просматривает блоки запроса для создания плана выполнения, предыдущему запросу понадобилось бы три сканирования базовой таблицы EMPLOYEES. Это может быть очень неэффективно. Следовательно, рекомендуется использовать составные столбцы.

Далее: Обзор манипулирования данными

Related Posts