0

我已经搜索(但找不到)Oracle 11g 的一个非常基本/介绍性的解释ROLLUP。从下面的查询中,我似乎得到了包含在ROLLUP子句中的任何表达式的小计。这个对吗?我将不胜感激一个基本而详细的解释。

编辑:刚刚发现这篇文章- 帮助了一点,但我仍然不完全在那里。

查询 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
4

1 回答 1

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;
于 2014-02-09T12:56:54.403 回答