Oracle ROLLUP - 介绍性解释?

时间:2014-02-09 01:47:04

标签: sql oracle11g group-by oracle-xe rollup

我搜索过(但找不到)Oracle 11g ROLLUP的基本/介绍性解释。从下面的查询中,我似乎为ROLLUP子句中包含的任何表达式 not 提供了小计。它是否正确? 我很感激基本和详细的解释。

编辑:刚刚找到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

1 个答案:

答案 0 :(得分: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;