PLSQL中有很多高级分析函数,可以很简单的处理很复杂的数学运算。
1、ROLLUP和CUBE函数,自动汇总数据
select *from test_tbl的数据这样的
col_a col_b col_c
---- ----- -----
1 b1 12
1 b1 2
1 b2 31
2 b2 7
2 b3 42
2 b3 1
2 b3 3
如果按A、B列进行汇总C列,用一般的方法是这样:
select col_a,col_b,sum(col_c) from test_tbl group by col_a,col_b 结果如下
col_a col_b sum(col_c)
---- ----- --------
1 b1 14
1 b2 31
2 b2 7
2 b3 46
但是如果这时候还想按A列汇总且要C列的合计数,那就要再用两个SQL来嵌套,很麻烦,不过用rollup就简单多了:
select nvl(col_a,'合计') col_a,nvl(col_b,decode(col_a,null,'','小计'||col_a)) col_b,sum(col_c)
from test_tbl group by rollup(col_a,col_b),结果如下
col_a col_b sum(col_c)
---- ----- --------
1 b1 14
1 b2 31
1 小计1 45
2 b2 7
2 b3 46
2 小计2 53
合计 98
结果集刚好是先按A和B汇总,然后是按A汇总,最后是全部汇总这时候如果再要按B列汇总,怎么办呢?又要用SQL嵌套吗?不是的,如果有这要求的话,改用cube函数就OK啦
select nvl(col_a,decode(col_b,null,'合计','小计'||col_b)) col_a,nvl(col_b,decode(col_a,null,'','小计'||col_a)) col_b,sum(col_c)
from test_tbl group by cube(col_a,col_b) 结果如下
col_a col_b sum(col_c)
---- ----- --------
1 b1 14
1 b2 31
1 小计1 45
2 b2 7
2 b3 46
2 小计2 53
小计b1 b1 14
小计b2 b2 38
小计b3 b3 46
合计 98
跟刚才rollup函数得到的结果集有点不一样,那就是多了些按B列的汇总行。
2、LAG和LEAD函数,自动链接上/下行记录值
SQL> desc test_tbl
Name Type
----- ------
COL_K NUMBER
现在按顺序的往这个test_tbl表中插入一系列数据,下面是SQL:
insert into test_tbl values(1)
insert into test_tbl values(2)
insert into test_tbl values(4)
insert into test_tbl values(5)
insert into test_tbl values(8)
insert into test_tbl values(9)
insert into test_tbl values(11)
insert into test_tbl values(12)
oracle数据库PL/SQL的分析函数---汇总
最新推荐文章于 2021-01-28 14:09:18 发布
本文介绍了Oracle数据库中PL/SQL的分析函数,包括ROLLUP和CUBE函数进行数据汇总,以及LAG和LEAD函数链接记录。通过实例详细解释了如何使用这些函数进行数据处理,例如按特定列进行分组和排名,以及在不规则数据中找到缺失值。此外,还讨论了RANK和DENSE_RANK在排名问题上的应用。
摘要由CSDN通过智能技术生成