rollup函数的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rollup函数的使用相关的知识,希望对你有一定的参考价值。

如何使用rollup函数 cube函数 在数据库中

‍ROLLUP/CUBE基本语法,ROLLUP/CUBE的使用语法如下:

SELECT [column,] group_function(column). . .

FROM table

 [WHERE  condition]

[GROUP BY  [ROLLUP/CUBE]  group_by_expression]

[HAVING having_expression];

[ORDER BY  column]; 

使用ROLLUP/CUBE,必须具备:1.查询语句为分组函数(group function)查询。最常见的有:AVG, SUM, MAX, MIN, COUNT等都是分组函数。2. ROLLUP/CUBE的使用位置在GROUP BY后面。

Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是Group by ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。

如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。 grouping_id()可以美化效果。

除了使用GROUPING函数,还可以使用GROUPING_ID来标识GROUP BY的结果。 也可以 Group by Rollup(A,(B,C)) ,Group by A Rollup(B,C)。

扩展资料

ROLLUP:  GROUP BY A, B会对A和B出现的每种可能性进行分组。而GROUP BY ROLLUP(A, B)会对A和B出现的每种可能性分组,A的每种可能性分组,最后计算所有的情况。 

例如:

rollup(a,b) 包括:(a,b)、(a)、()

rollup(a,b,c) 包括:(a,b,c)、(a,b)、(a)、()

CUBE:  和ROLLUP类似,GROUP BY CUBE(A, B)会对A和B出现的每种可能性分组,A的每种可能性分组,B的每种可能性分组,最后计算所有的情况。

Oracle为了解决引入ROLLUP和CUBE后,汇总和NULL值无法区分的情况,提供了GROUPING、GROUPING_ID和GROUP_ID三个函数。

例如:  cube(a,b) 包括:(a,b)、(a)、(b)、()  cube(a,b,c) 包括:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()

参考技术A Rollup():分组函数可以理解为group by的精简模式,具体分组模式如下:
Rollup(a,b,c): (a,b,c),(a,b),(a),(全表)

Oracle ROLLUP和CUBE 用法
Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是Group by ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。
如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。 grouping_id()可以美化效果。除了使用GROUPING函数,还可以使用GROUPING_ID来标识GROUP BY的结果。
也可以 Group by Rollup(A,(B,C)) ,Group by A Rollup(B,C),…… 这样任意按自己想要的形式结合统计数据,非常方便。
参考技术B Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作

Teradatagrouping和rollup窗口函数

1.group by后带rollup子句

先按一定的规则产生多种分组,然后返回各个分组所产生的结果集的并集,且没有去掉重复数据(统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数)。下面举例说明: 

例1:Group by rollup(A ,B) 

//返回如下3个分组的统计结果集的并集,且未去掉重复数据。
第一种:group by A,B 
第二种:group by A 
第三种:group by NULL (即没有分组,所有数据做一个统计)

例2:Group by rollup(A ,B,C) 

//返回如下4种分组统计结果集的并集,且未去掉重复数据
第一种:group by A,B,C 
第二种:group by A,B 
第三种:group by A 
第四种:group by NULL

例3:Group by C , rollup(A ,B)

//group by和rollup间还有其它列C,返回如下3种分组统计结果集的并集,且未去掉重复数据
第一种:group by C,A,B     
第二种:group by C,A      
第三种:group by C,NULL  等价于group by C 

例4:Group by rollup(A ,(B,C))

//多列被括号括在一起时,视为一个整体。返回如下3中分组统计结果的并集,且未去掉重复数据
第一种:group by A,B,C 
第二种:group by A   
第三种:group by NULL

 

 

 

参考文档:

group by后加rollup子句的用法以及与cube和grouping sets子句的区别

SQL基础之GROUPING

 

 

 

以上是关于rollup函数的使用的主要内容,如果未能解决你的问题,请参考以下文章

rollup和grouping函数

ORACLE rollup函数

Oracle分组函数之ROLLUP

Vue 是如何用 Rollup 打包的?

rollup函数 和cube函数 的区别?

Teradatagrouping和rollup窗口函数