分析函数
<1> ROLLUP();
进行数据的汇总,并生成一行记录。
SELECT deptno,SUM(sal) FROM emp GROUP BY ROLLUP(deptno);
结果:
<2> CUBE();
会对每一个条件进行单独的汇总;
--例子
SELECT DEPTNO,JOB,SUM(sal),
CASE
WHEN GROUPING(deptno) = 0 AND GROUPING(job) = 1 THEN 'group by DEPTNO 后 sum(sal)'
WHEN GROUPING(deptno) = 1 AND GROUPING(job) = 0 THEN 'group by JOB 后 sum(sal)'
WHEN GROUPING(deptno) = 1 AND GROUPING(job) = 1 THEN '总计'
END AS b
FROM emp GROUP BY CUBE( DEPTNO,JOB)
ORDER BY deptno
--含义:
首先对deptNo进行分组求sum(sal),
然后对job进行分组求sum(sal);
最后全部汇总。
<3> GROUPING的使用
GROUPING函数可以接受一列,返回0或者1。只能和ROLLUP()和CUBE()函数使用。
如果列值为空,那么GROUPING()返回1;如果列值非空,那么返回0。
当需要在返回空值的地方,显示某个值时,GROUPING()就非常有用。
***请参考上述例子<2>***
<4>GROUPING SETS 提供了指定汇总集合条件的功能。
SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY GROUPING SETS(E.DEPTNO,E.JOB);
含义:
首先对deptNo进行分组求sum(sal),
然后对job进行分组求sum(sal);
和CUBE()函数的区别:CUBE函数 = GROUPING SETS() + 原始记录(emp中的数据) + ROLLUP(全部汇总);