/*GROUPING函数:rollup和cube函数在查询结果中,有些行的列值会存在null,一般意味着是对此列的小计或者合计,
但是null也有可能是原始数据存在的null,grouping函数专门处理扩展group BY 分组结果中null的问题
GROUPING只接受一个参数,且此参数来自rollup\CUBE\GROUPING SETS中的列,grouping函数对于是小计或者合计的列返回1,否则返回0*/
/*结合decode函数使用如下*/
-----------
/*过滤某些分组结果*/
但是null也有可能是原始数据存在的null,grouping函数专门处理扩展group BY 分组结果中null的问题
GROUPING只接受一个参数,且此参数来自rollup\CUBE\GROUPING SETS中的列,grouping函数对于是小计或者合计的列返回1,否则返回0*/
SELECT a.dname,b.mgr,SUM(sal) sum_sal,GROUPING(b.mgr)
FROM dept a,emp b
WHERE a.deptno = b.deptno
GROUP BY ROLLUP(a.dname,b.mgr);
/*结合decode函数使用如下*/
SELECT decode(GROUPING(a.dname),1,'全部部门',a.dname) dname,
decode(GROUPING(b.mgr),1,'全部老板',b.mgr) mgr,
SUM(sal) sum_sal
FROM dept a,emp b
WHERE a.deptno = b.deptno
GROUP BY ROLLUP(a.dname,b.mgr);
-----------
/*过滤某些分组结果*/
SELECT a.dname,b.mgr,b.job,SUM(sal) sum_sal--,GROUPING(a.dname),GROUPING(b.mgr),GROUPING(b.job)
FROM dept a,emp b
WHERE a.deptno = b.deptno
GROUP BY ROLLUP(a.dname,b.mgr,b.job)
HAVING GROUPING(a.dname) = 1
OR GROUPING(b.job) = 0;