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
可以使用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