2014-02-09 3 views
0

Я искал (но не могу найти) очень простое/вводное объяснение Oracle 11g's ROLLUP. Из нижеприведенных запросов представляется, что я получаю промежуточные итоги для любых выражений , а не, включенных в пункт ROLLUP. Это верно? Я бы оценил основные и подробные объяснения.Oracle ROLLUP - Вводное объяснение?

EDIT: Только что найдено this post - помогли немного, но я все еще не совсем там.

Запрос 1

SELECT department_id, job_id, SUM(salary) FROM employees 
WHERE department_id > 89 
GROUP BY department_id, job_id; 

Результат 1

DEPARTMENT_ID JOB_ID  SUM(SALARY) 
110    AC_ACCOUNT 8300 
90    D_VP  34000 
110    AC_MGR  12008 
90    AD_PRES 24000 
100    FI_MGR  12008 
100    FI_ACCOUNT 39600 

Запрос 2

SELECT department_id, job_id, SUM(salary) FROM employees 
WHERE department_id > 89 
GROUP BY department_id, ROLLUP(job_id); 

Результат 2

DEPARTMENT_ID JOB_ID  SUM(SALARY) 
90    AD_VP  34000 
90    AD_PRES 24000 
90       58000 
100    FI_MGR  12008 
100    FI_ACCOUNT 39600 
100       51608 
110    AC_MGR  12008 
110    AC_ACCOUNT 8300 
110       20308 

ответ

0

Проверить этот пример, следующие утверждения эквивалентны

SELECT COUNT(DISTINCT SID), YEAR, MONTH, flag1, flag2, flag3 
FROM a_table 
GROUP BY flag1, flag2, flag3, ROLLUP(YEAR, MONTH); 

SELECT COUNT(DISTINCT SID), YEAR, MONTH, flag1, flag2, flag3 
FROM a_table 
GROUP BY flag1, flag2, flag3, YEAR, MONTH 
UNION ALL 
SELECT COUNT(DISTINCT SID), YEAR, NULL AS MONTH, flag1, flag2, flag3 
FROM a_table 
GROUP BY flag1, flag2, flag3, YEAR 
UNION ALL 
SELECT COUNT(DISTINCT SID), NULL AS YEAR, NULL AS MONTH, flag1, flag2, flag3 
FROM a_table 
GROUP BY flag1, flag2, flag3; 

Хорошо, возьмите пример:

SELECT department_id, job_id, SUM(salary) FROM employees 
WHERE department_id > 89 
GROUP BY department_id, ROLLUP(job_id); 

точно так же, как

SELECT department_id, job_id, SUM(salary) FROM employees 
WHERE department_id > 89 
GROUP BY department_id, job_id 
Union all 
SELECT department_id, NULL as job_id, SUM(salary) FROM employees 
WHERE department_id > 89 
GROUP BY department_id; 
+0

Спасибо - любой шанс на более простой пример? Я относительно новичок в SQL. –

+0

Это простой пример, он объясняет предложение ROLLUP, которое было сделано для этого без него –