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
  • 相关阅读:
    [原创]WKWebview点击图片查看大图
    解决项目中.a文件的冲突
    友盟添加页面统计
    使用cocoaPods和遇到的问题以及解决办法
    #leetcode刷题之路50-Pow(x, n)
    #leetcode刷题之路49-字母异位词分组
    #leetcode刷题之路48-旋转图像
    #leetcode刷题之路47-全排列 II
    #leetcode刷题之路46-全排列
    #leetcode刷题之路45-跳跃游戏 II
  • 原文地址:https://www.cnblogs.com/future2012lg/p/2879845.html
Copyright © 2011-2022 走看看