oracle数据库PL/SQL的分析函数---汇总

本文介绍了Oracle数据库中PL/SQL的分析函数,包括ROLLUP和CUBE函数进行数据汇总,以及LAG和LEAD函数链接记录。通过实例详细解释了如何使用这些函数进行数据处理,例如按特定列进行分组和排名,以及在不规则数据中找到缺失值。此外,还讨论了RANK和DENSE_RANK在排名问题上的应用。
摘要由CSDN通过智能技术生成

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)
   

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值