学无先后,达者为师

网站首页 编程语言 正文

oracle利用sql语句实现分组小计(grouping,group by ,rollup)

作者:code_std 更新时间: 2022-08-13 编程语言

今天遇到一个需求,要做一个报表,格式如下:
在这里插入图片描述
原本想直接查询出来,然后用程序把数据整理一下展示,然后想到了oracle查询语句的grouping,如果直接查出来就是这样的,之后在对数据加工后展示就更简单了。于是有了下面的简单测试:

创建对应的数据

在这里插入图片描述

利用rollup 分组

如下图,group by rollup(a,b) 和 group by (a,b) 分组出来的结果,明显不同。
group by rollup(a,b) 分组实际就是先将 shi1 进行 group by (a,b) 分组,然后再将分组出来的结果进行 group by a 分组。
这时候分组出来的结果已经和我想的带小计的结果差不多了,只需要将 B 列为空的 A 列换成小计即可。
在这里插入图片描述

利用 grouping,找出替换规律

通过下图结果,可得出一个结论,如果利用 grouping(xx) 来显示,则只要被 group by 分组过的列都会显示 0,反之显示 1;
例如: 1 2 两行,grouping(A) 和 grouping(B) 由于被 group by rollup(a,b) 分组时,先按照 group by (a,b) 分组,后按照 group by a 分组,所以 1 2 两行的 grouping(A) 和 grouping(B) 显示为 0。同样第三行的 grouping(A) 被按照 group by a 分组过,所以也显示为 0, 第三行的 grouping(B) 列因为未被分组过,所以显示为1。
在这里插入图片描述

利用decode,达成最终结果

在这里插入图片描述

原文链接:https://blog.csdn.net/qq_26330543/article/details/126048534

栏目分类
最近更新