Пример GROUPING SETS

Запрос, показанный на рисунке, вычисляет агрегаты по двум группированиям.

Пример GROUPING SETS

Таблица делится на следующие группы:

  • идентификатор подразделения, идентификатор должности (department_id, job_id);

  • идентификатор должности, идентификатор менеджера (job_id, manager_id).

Для каждой из этих групп рассчитываются средние оклады. Набор результатов содержит средний оклад для каждой из двух этих групп.

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

  • Средний оклад всех сотрудников на должности SH_CLERK, подчиняющихся менеджеру 122, составляет 3200.

  • Средний оклад всех сотрудников на должности AC_MGR, подчиняющихся менеджеру 101, составляет 12 000 и т. д.

Группа, помеченная как 2, интерпретируется следующим образом:

  • Средний оклад всех сотрудников на должности AC_MGR в подразделении 110 составляет 12 000.

  • Средний оклад всех сотрудников на должности AD_PRES в подразделении 90 составляет 24 000 и т. д.

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

    SELECT department_id, job_id, NULL as manager_id,
    AVG(salary) as AVGSAL
FROM employees
GROUP BY department_id, job_id
UNION ALL
SELECT NULL, job_id, manager_id, avg(salary) as AVGSAL
FROM employees
GROUP BY job_id, manager_id;

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

Далее: Обзор функций SQL

Статьи по теме
Комментарии
Написать

(обязательно)

(обязательно)

Это не спам (обязательно)