zoukankan      html  css  js  c++  java
  • ORACLE ROLLUP CUBE

     Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。

    如下SQL

    select t.*, t.rowid from group_test t;

    MANAGER 20 2975 AAAQMEAAEAAEGk/AAA
    SALESMAN 30 1250 AAAQMEAAEAAEGk/AAB
    MANAGER 30 2850 AAAQMEAAEAAEGk/AAC
    MANAGER 10 2450 AAAQMEAAEAAEGk/AAD
    ANALYST 20 3000 AAAQMEAAEAAEGk/AAE
    PRESIDENT 10 5000 AAAQMEAAEAAEGk/AAF
    SALESMAN 30 1500 AAAQMEAAEAAEGk/AAG
    CLERK 20 1100 AAAQMEAAEAAEGk/AAH
    CLERK 30 950 AAAQMEAAEAAEGk/AAI
    ANALYST 20 3000 AAAQMEAAEAAEGk/AAJ
    CLERK 10 1300 AAAQMEAAEAAEGk/AAK
    CLERK 20 800 AAAQMEAAEAAEGlAAAA
    SALESMAN 30 1600 AAAQMEAAEAAEGlAAAB
    SALESMAN 30 1250 AAAQMEAAEAAEGlAAAC

    select job, deptno, sum(sal) total_sal
      from group_test
     group by rollup(job, deptno);

    JOB       DEPTNO      TOTAL_SAL
    CLERK    10             1300
    CLERK    20             1900
    CLERK    30             950
    CLERK                    4150
    ANALYST 20           6000
    ANALYST                6000
    MANAGER 10          2450
    MANAGER 20          2975
    MANAGER 30          2850
    MANAGER               8275
    SALESMAN 30         5600
    SALESMAN              5600
    PRESIDENT 10         5000
    PRESIDENT              5000
                                 29025

     select job, deptno, sum(sal) total_sal
      from group_test
     group by cube(job, deptno);

    JOB DEPTNO TOTAL_SAL
        29025
      10 8750
      20 10875
      30 9400
    CLERK   4150
    CLERK 10 1300
    CLERK 20 1900
    CLERK 30 950
    ANALYST   6000
    ANALYST 20 6000
    MANAGER   8275
    MANAGER 10 2450
    MANAGER 20 2975
    MANAGER 30 2850
    SALESMAN   5600
    SALESMAN 30 5600
    PRESIDENT   5000
    PRESIDENT 10 5000

    select decode(grouping_id(job, deptno), 1, '合计', job || deptno) as group_col,
           sum(sal) total_sal
      from group_test
     group by rollup(job, deptno);

    GROUP_COL TOTAL_SAL
    CLERK10 1300
    CLERK20 1900
    CLERK30 950
    合计 4150
    ANALYST20 6000
    合计 6000
    MANAGER10 2450
    MANAGER20 2975
    MANAGER30 2850
    合计 8275
    SALESMAN30 5600
    合计 5600
    PRESIDENT10 5000
    合计 5000
      29025
  • 相关阅读:
    微信开发:微信js_sdk分享,使用场景,网页在微信app内部分享时的标题与描述,包括logo设置(一)
    云服务最开始的初始密码与远程连接密码?
    阿里云域名的ssl证书申请与腾讯服务器域名的证书安装
    关于 https的SNI问题
    关于网页授权access_token和普通access_token的区别
    转载:敏捷开发框架的优势
    select自定义下拉三角符号,css样式小细节
    关于ffmpeg /iis 8.5 服务器下,视频截取第一帧参数配置
    C# WebAPI中使用Swagger
    面向对象编程思想(OOP)
  • 原文地址:https://www.cnblogs.com/future2012lg/p/2879845.html
Copyright © 2011-2022 走看看