十进制数。如CUBE(a,b),则GROUPING_ID(a,b) 的结果如下图所示:
GROUPING_ID的好处就是可以对多列进行计算,从而得到此列的分组级别。 从上图可以看出,GROUPING_ID(column_list) 中的 colum_list 和扩展分组保持一致,那么 GROUPING_ID 值得种类必须与对应扩展分组数目保持一致: 比如 CUBE(a,b,c) 的GROUPING_ID(a,b,c)的值有 8 种,ROLL(a,b,c)的GROUPING_ID(a,b,c) 的值有 4 种。
GROUPING_ID 的取值范围都一样,和列的数目有关,比如有 n 列,则 GROUPING_ID的取值范围在[ 0-2^n-1 ] 6.2.1 GROUPING_ID 函数过滤某些分组结果 需求:改写6.1 节 GROUPING 过滤结果的例子,用 GROUPING_ID 实现同等功能。 先分析对于 ROLLUP(d.dname,e.mgr,e.job) 使用 GROUPING_ID 函数的结果,注意的是,一般使用 GROUPING_ID函数,列的顺序要与 ROLLUP、CUBE、GROUPING SETS 中的顺序保持一致。
从表中就可以清楚的看出,实现这个需求只要 GROUPING_ID(d.dname,e.mgr,e.job) 取 0 和 7 即可。 select d.dname,e.mgr,e.job,sum(e.sal) sum_sal from dept d,emp e where d.deptno=e.deptno group by rollup(d.dname,e.mgr,e.job) having grouping_id(d.dname,e.mgr,e.job) in (0,7)
|