分析函数

 

<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(全部汇总);

posted @ 2011-12-15 23:25  Hard-齐  阅读(122)  评论(0编辑  收藏  举报