分析函数
[@more@]普通的sql匯總數據:
SQL> SELECT job,sum(sal) from emp group by job
2 union all
3 select '合計' job,sum(sal) from emp;
JOB SUM(SAL)
--------- ----------
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
合計 29025
autot: 6 consistent gets
使用rollup統計函數:
SQL> select nvl(job,'合計') job,sum(sal)
2 from emp
3 group by rollup (job);
JOB SUM(SAL)
--------- ----------
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
合計 29025
autot: 3 consistent gets
从上面的例子我们不难看出使用rollup函数,系统的sql语句更加简单,耗用的资源更少,从6个consistent gets降到3个consistent gets,如果基表很大的话,结果就可想而知了.
为了介绍cube函数我们再来看看另外一个使用rollup的例子:
1 select deptno,nvl(job,'合計') job,sum(sal)
2 from emp
3 group by rollup (deptno,job)
4* order by deptno
SQL> /
DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 合計 8750
20 ANALYST 6000
20 CLERK 1900
20 MANAGER 2975
20 合計 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 合計 9400
合計 29025
系统只是根据rollup的第一个参数DEPTNO对结果集的数据做了汇总处理,而没有对JOB做汇总分析处理,cube函数就是为了这个而设计的.
下面,让我们看看使用cube函数的结果
cube函數的使用:
1 select deptno,nvl(job,'合計') job,sum(sal
2 from emp
3 group by cube (deptno,job)
4* order by deptno
SQL> /
DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 合計 8750
20 ANALYST 6000
20 CLERK 1900
20 MANAGER 2975
20 合計 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 合計 9400
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
合計 29025
可以看到,在cube函数的输出结果比使用rollup多出了几行统计数据.这就是cube函数根据JOB做的汇总统计结果
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9925929/viewspace-915624/ ,如需转载,请注明出处,否则将追究法律责任。