[2019.7.18]Oracle的rollup语句详解

本文详细解析了SQL中的rollup语句,通过实例演示了如何使用该语句进行多级分组汇总,揭示了其背后的运行机制及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于 rollup 语句的解析(借鉴了前辈们的经验)

在多行查询中,使用rollup语句能够大大提高我们的操作效率,在开始接触rollup语句
的时候,总是不能理解其中的顺序,查了一些资料和前辈们的博客,实践操作了几次,在此总结一下,首先rollup是卷起的意思,大体能够形容他的作用。
group by rollup(a,b)
这条语句相当于分组三次
第一次,a,b两个约束条件,即a相同,b也相同的分为同一组
第二次,只是用a一个条件进行分组,把上一次形成的结果在进行分组,把a相同的分为一组
第三次,没有约束条件,将整个表数据分为一组
这样三次之后,我们就有了三个分组条件,那么sum函数,就会给每一个分组都执行一次计算总和
举例如下:

SQL> select deptno,job,sum(sal) from emp group by deptno,job order by deptno;
单独使用分组查询
 
DEPTNO JOB         SUM(SAL)
------ --------- ----------
    10 CLERK           1300
    10 MANAGER         2450
    10 PRESIDENT       5000
    20 ANALYST         6000
    20 CLERK           1900
    20 MANAGER         2975
    30 CLERK            950
    30 MANAGER         2850
    30 SALESMAN        5600
 
已选择9行。
 
SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job) order by deptno;
 
DEPTNO JOB         SUM(SAL)
------ --------- ----------
    10 CLERK           1300 第一次分组的sum总和计算
    10 MANAGER         2450
    10 PRESIDENT       5000
    10                 8750 第二次分组添加的计算
    20 ANALYST         6000
    20 CLERK           1900
    20 MANAGER         2975
    20                10875
    30 CLERK            950
    30 MANAGER         2850
    30 SALESMAN        5600
    30                 9400
                      29025 第三次分组添加的计算
所以rollup函数进行多次分组计算
 
已选择13行。

SQL> break on deptno skip 2 表示以deptno分组,重复的不显示,不同的deptno跳过两行
SQL> /

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
---------- --------- ----------                                                                                                                                                                         
        10 CLERK           1300                                                                                                                                                                         
           MANAGER         2450                                                                                                                                                                         
           PRESIDENT       5000                                                                                                                                                                         
                           8750                                                                                                                                                                         
                                                                                                                                                                                                        
                                                                                                                                                                                                        
        20 CLERK           1900                                                                                                                                                                         
           ANALYST         6000                                                                                                                                                                         
           MANAGER         2975                                                                                                                                                                         
                          10875                                                                                                                                                                         
                                                                                                                                                                                                        

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
---------- --------- ----------                                                                                                                                                                         
                                                                                                                                                                                                        
        30 CLERK            950                                                                                                                                                                         
           MANAGER         2850                                                                                                                                                                         
           SALESMAN        5600                                                                                                                                                                         
                           9400                                                                                                                                                                         
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                          29025                                                                                                                                                                         
                                                                                                                                                                                                        
                                                                                                                                                                                                        

已选择 13 行。

SQL>  break on null  恢复之前的状态,对结果不分组
SQL> /

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
---------- --------- ----------                                                                                                                                                                         
        10 CLERK           1300                                                                                                                                                                         
        10 MANAGER         2450                                                                                                                                                                         
        10 PRESIDENT       5000                                                                                                                                                                         
        10                 8750                                                                                                                                                                         
        20 CLERK           1900                                                                                                                                                                         
        20 ANALYST         6000                                                                                                                                                                         
        20 MANAGER         2975                                                                                                                                                                         
        20                10875                                                                                                                                                                         
        30 CLERK            950                                                                                                                                                                         
        30 MANAGER         2850                                                                                                                                                                         
        30 SALESMAN        5600                                                                                                                                                                         

    DEPTNO JOB         SUM(SAL)                                                                                                                                                                         
---------- --------- ----------                                                                                                                                                                         
        30                 9400                                                                                                                                                                         
                          29025                                                                                                                                                                         

已选择 13 行。

SQL> spool off

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值