zoukankan      html  css  js  c++  java
  • oracle分组-神奇的cube和rollup

    先看代码:

    表结构如下:

    emp表

    EMPNO                                     NOT NULL NUMBER(4)
     ENAME                                              VARCHAR2(10)
     JOB                                                VARCHAR2(9)
     MGR                                                NUMBER(4)
     HIREDATE                                           DATE
     SAL                                                NUMBER(7,2)
     COMM                                               NUMBER(7,2)
     DEPTNO                                             NUMBER(2)

    使用cube分组:

    sql:select deptno,empno,count(empno),sum(sal) from emp group by cube(deptno,empno);

    结果:

        DEPTNO      EMPNO COUNT(EMPNO)   SUM(SAL)
    ---------- ---------- ------------ ----------
                                    14      29025
                     7900            1        950
                     7369            1        800
                     7499            1       1600
                     7521            1       1250
                     7566            1       2975
                     7654            1       1250
                     7698            1       2850
                     7782            1       2450
                     7788            1       3000
                     7839            1       5000
                     7844            1       1500
                     7876            1       1100
                     7902            1       3000
                     7934            1       1300
            10                       3       8750
            10       7782            1       2450
            10       7839            1       5000
            10       7934            1       1300
            20                       5      10875
            20       7369            1        800
            20       7566            1       2975
            20       7788            1       3000
            20       7876            1       1100
            20       7902            1       3000
            30                       6       9400
            30       7900            1        950
            30       7499            1       1600
            30       7521            1       1250
            30       7654            1       1250
            30       7698            1       2850
            30       7844            1       1500

    32 rows selected.

    使用rollup:

    sql:select deptno,empno,count(empno),sum(sal) from emp group by rollup(deptno,empno);

    结果:

        DEPTNO      EMPNO COUNT(EMPNO)   SUM(SAL)
    ---------- ---------- ------------ ----------
            10       7782            1       2450
            10       7839            1       5000
            10       7934            1       1300
            10                       3       8750
            20       7369            1        800
            20       7566            1       2975
            20       7788            1       3000
            20       7876            1       1100
            20       7902            1       3000
            20                       5      10875
            30       7900            1        950
            30       7499            1       1600
            30       7521            1       1250
            30       7654            1       1250
            30       7698            1       2850
            30       7844            1       1500
            30                       6       9400
                                    14      29025

    18 rows selected.

    根据上面的结果,我们可以看出,cube相当于在rollup的基础上进行了功能扩展

    就像是:rollup(a,b): 结果有(a,b),(a),()

        cube(a,b):结果有(a,b),(a),(b),()

    这仅是本人的一些心得,有失当的地方希望指点。。。

  • 相关阅读:
    java连接Ldap
    REGEXP_LIKE,REGEXP_INSTR,REGEXP_SUBSTR,REGEXP_REPLACE
    正则表达式学习笔记
    旋转的播放按钮
    折叠table中的tr
    css选择器.md
    清除浮动.md
    jquery-validate使用.md
    EL表达式.md
    C标签的使用.md
  • 原文地址:https://www.cnblogs.com/sunshinekevin/p/6808557.html
Copyright © 2011-2022 走看看