我搜索过(但找不到)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
答案 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;