oracle中cube 与 rollup的区别以及Grouping和Grouping sets的使用

1、oracle中cube 与 rollup的区别

Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。

rollup(col1, col2,…) 和 cube(col1, col2,…) 用法区别在 cube 在 rollup 汇总的记录集上,还会增加对 col2 等字段的汇总;

ROLLUP只对第一个参数(字段)进行汇总,CUBE可以对参数(字段)依次汇总,所以ROLLUP中参数个数只有一个会起作用(且排名在前的参数)。

ROLLUP(A, B, C):
首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。
CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),©,最后对全表进行GROUP BY操作。
CUBE 和 ROLLUP 之间的区别在于:
CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。

例如rollup使用

只会对deptno字段进行汇总,然后求其deptno,job 的总汇总;

在这里插入图片描述

例如cude使用

不但要对deptno进行汇总,还会对job进行汇总;然后再对deptno和job进行总汇总;

在这里插入图片描述

2、 Group by中其他函数的使用

1>Grouping 函数

当使用rollup和cude操作符时生成统计结果时,某个统计结果可能用到一列或者多列,也可能没有使用任何项。为了确定统计结果是否使用了特定列,可以使用Grouping函数。

如果该函数返回0,表示统计结果中使用了该列;如果该函数返回1,则表示统计结果没有使用该列

在这里插入图片描述

2>Grouping Sets操作符

grouping sets操作符是Group by子句的进一步扩展,在Oracle Database 9i之前使用group by子句一次只能显示单种分组统计结果,那么需要编写多条select语句。从Oracle Database 9i开始,通过使用Group sets操作符,可以合并多个分组的统计结果,从而简化多个分组操作。

以下并不能清楚的看出根据那个分组来统计结果,没有实现多个分组操作

在这里插入图片描述

实现了多个分组操作

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值