ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle 分组函数 sets(),rollup() , cube() 功能详解

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

原创 Linux操作系统 作者:JumFlow 时间:2011-12-07 14:16:05 0 删除 编辑
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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-03-03

  • 博文量
    72
  • 访问量
    183876