oracle 分组函数 sets(),rollup() , cube() 功能详解

本文详细解析了Oracle数据库中groupby的扩充功能,包括sets(), rollup(), cube()三个分组函数以及grouping()函数的作用。介绍了每个函数的基本原理、应用场景和分组规律,特别强调了在报表开发中的应用价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle 其实为用户考虑的问题还很多的,有好多的功能我们都没有接触到。 
比如说 group by 的扩充,这个功能很强大,其中相关函数包括:sets() , rollup () ,cube() 这三个函数主要是分组。 groping() 这个函数主要是判断 分组列是否为空 , 用在select 映射中。 

sets 这个分组函数比较简单,可以根据需求进行自由分组。 

sets(col1 , col1 , col1 ) 
相当于
group by col1 union all
group by col2 union all 
group by col3 union all

rollup 这个分组函数, 从左到右依次递增列组合分组。 个人理解有点像数学的一个运算: 100 , 110 , 111 ,每个1表示已分组列。这种分组数为 n 。 
1*10 n次方+1*10(n-1) 次方.... 1*10 (n-n) 次方
rollup(col1 , col2 , col3 ) 
相当于
group by  col1 , col2 , col2  union all
group by  col1 , col2  union all
group  by col1
group by ()


cube 这个分组函数,比较难理解,刚开始时,我始终没有找它的分组规律。最后经过一些文档和自己的多次测试,终于搞清楚了它的分组规律。
其实这个分组函数,有点像数学中的数数(二进制),1 表示已分组的列。这种分组数位 2 n次方减1 。

000
001
010
011
100
101
110
111

cube(col1 , col2 , col3 ) 
相当于
group by () union all 
group by col3 union all 
group by col2  union all 
group by col2 ,col3  union all 
group by col1 union all 
group by col1, col3  union all 
group by col1, col2  union all 
group by  col1, col2 , col3   union all 

----------------------------------------------------------------------------------------------------------
grouping() 这个函数除了前面说的作用外,其实还有另外一个作用,那就是判断列是否被分组。 它的返回值只有两个,1 和 0 。 当返回 1 时则表明该列没有被分组 ,返回 0 反之。当然这些列都是出现在分组函数中的。其实这个功能在实际的一些报表开发中还是很有用的,可以很好的,直观的区分各个组别。



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25380220/viewspace-712874/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25380220/viewspace-712874/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值