ITPub博客

首页 > Linux操作系统 > Linux操作系统 > orale中的grouping()、cube()、rollup()

orale中的grouping()、cube()、rollup()

原创 Linux操作系统 作者:流浪的野狼 时间:2013-10-05 17:03:08 0 删除 编辑

当你与COUNT和SUM这类总计函数一起使用GROUP BY语句时,你一般得不到多级总数。GROUP BY中每个唯一的列组合生成一个总数,但这些总数不会“累加”到更高一级的总数中
要实现这一点,你可以用GROUP BY ROLLUP或GROUP BY CUBE替代GROUP BY,不过它们会生成所有可能的总数,而你可能不需要全部总数。对GROUP BY CUBE而言,将会生成2^n组总数,这里的n是GROUP BY中列的数目。

SQL> select grouping(deptno),grouping(job),deptno,job,sum(sal),avg(sal) from emp group by cube(deptno,job) order by 3,4;

GROUPING(DEPTNO) GROUPING(JOB)     DEPTNO JOB         SUM(SAL)   AVG(SAL)
---------------- ------------- ---------- --------- ---------- ----------
               0             0         10 CLERK           1300       1300
               0             0         10 MANAGER         2450       2450
               0             0         10 PRESIDENT       5000       5000
               0             1         10                 8750 2916.66667
               0             0         20 ANALYST         6000       3000
               0             0         20 CLERK           1900        950
               0             0         20 MANAGER         2975       2975
               0             1         20                10875       2175
               0             0         30 CLERK            950        950
               0             0         30 MANAGER         2850       2850
               0             0         30 SALESMAN        5600       1400
               0             1         30                 9400 1566.66667
               1             0            ANALYST         6000       3000
               1             0            CLERK           4150     1037.5
               1             0            MANAGER         8275 2758.33333
               1             0            PRESIDENT       5000       5000
               1             0            SALESMAN        5600       1400
               1             1                           29025 2073.21429

18 rows selected.

其中当grouping()的值为1时表示该字段在相应行的统计中未被使用,当其值为0时,表示该字段在相应行的统计中被使用。It is used to find the groups forming the subtotal in a row,and it can onl be used with rollup and cube operators specified in the group by clause.

此外关于grouping()还可以如下使用:

SQL> select case grouping(job) when 0 then job else 'sum_total' end job ,sum(sal),avg(sal) from emp group by rollup(job) order by job;

JOB         SUM(SAL)   AVG(SAL)
--------- ---------- ----------
ANALYST         6000       3000
CLERK           4150     1037.5
MANAGER         8275 2758.33333
PRESIDENT       5000       5000
SALESMAN        5600       1400
sum_total      29025 2073.21429

转载请注明:http://space.itpub.net/28612416

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28612416/viewspace-773766/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-04-10

  • 博文量
    151
  • 访问量
    1507351