rollup()函数、cube()函数 --通常与group by 子句一起使用,根据维度在分组后进行聚合操作 --应用场景:为每个分组返回一个小计,同时为所有分组返回总计 select ename,deptno,sum(sal) from emp group by rollup(deptno,ename); --rollup和cube独立考虑每一列再决定其必须计算小计,对rollup()而言,通过列表来确定分组, --而cube函数则对每种可能的列组合分组 rollup()辅助函数:往往是为了过滤掉一部分统计数据,而达到美化统计结果的作用。 --grouping():必须接受一列且只能接受一列做为其参数。参数列值为空返回1,参数列值非空返回0。(即如果参数的列的值在rollup中,则返回1;否则返回0) select ename,deptno,sum(sal),grouping(ename),grouping(deptno) from emp group by rollup(deptno,ename); --grouping_id():必须接受一列或多列做为其参数。返回值为按参数排列顺序,依次对各个参数使用grouping()函数, --并将结果值依次串成一串二进制数然后再转化为十进制所得到的值 select ename,deptno,sum(sal),grouping_id(deptno,ename) from emp group by rollup(deptno,ename); 例如:grouping(a) = 0 ; grouping(b) = 1; 则:grouping_id(a,b) = (01)2 =0*2^1+1*2^0= 1; grouping_id(b,a) = (10)2 =1*2^1+0*2^0=2; --group_id()函数:调用时不需要且不能传入任何参数。返回值为某个特定的分组出现的重复次数(第一大点中的第3种情况中往往会产生重复的分组)。 --重复次数从0开始,例如某个分组第一次出现则返回值为0,第二次出现时返回值为1,……,第n次出现返回值为n-1。可用来去重 grouping sets()函数:指定感兴趣的分组,减少计算整个维度的消耗 select deptno,ename,sum(sal)from emp group by grouping sets (deptno,ename);
原文链接:https://lanjingling.github.io/2015/10/09/oracle-fenxihanshu-1/