GROUPING

GROUPING函数可以接受一列,返回0或者1。如果列值为空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查询中使用。当需要在返回空值的地方显示某个值时,GROUPING()就非常有用。
可以使用GROUPING_ID函数借助HAVING子句对记录进行过滤,将不包含小计或者总计的记录除去。GROUPING_ID()函数可以接受一列或多列,返回GROUPING位向量的十进制值。GROUPING位向量的计算方法是将按照顺序对每一列调用GROUPING函数的结果组合起来。


select * from  a;

1 a 1 1
2 a 2 2
3 b 3 3
4 b 4 4


select grade, sum(num), grouping(a.grade) from a group by rollup(grade);

1 a 3 0
2 b 7 0
3 10 1


select decode(grouping(a.grade), 1, '总计', grade), sum(num)
  from a
group by rollup(grade);

1 a 3
2 b 7
3 总计 10


GOURPING位向量计算

如上例所示

division_id          job_id           位向量      GROUPING_ID()返回值

非空                     非空              00             0

非空                     空                 01             1

空                        非空              10             2

空                        空                 11             3

你可能感兴趣的:(group)