oracle 数据分组

1.使用having子句限制分组显示结果

SQL> select deptno,avg(sal),max(sal) from emp
  2  group by deptno
  3  having avg(sal)<2500;

    DEPTNO   AVG(SAL)   MAX(SAL)                                                
---------- ---------- ----------                                                
        20       2175       3000                                                
        30 1566.66667       2850   


2.rollup和cube操作符

示例一:使用rollup


SQL> select deptno,job,avg(sal) from emp
  2  group by rollup(deptno,job);

    DEPTNO JOB         AVG(SAL)                                                 
---------- --------- ----------                                                 
        10 CLERK           1300                                                 
        10 MANAGER         2450                                                 
        10 PRESIDENT       5000                                                 
        10           2916.66667                                                 
        20 CLERK            950                                                 
        20 ANALYST         3000                                                 
        20 MANAGER         2975                                                 
        20                 2175                                                 
        30 CLERK            950                                                 
        30 MANAGER         2850                                                 
        30 SALESMAN        1400                                                 
        30           1566.66667                                                 
                     2073.21429                                                 

13 rows selected.


示例二:使用cube

SQL> select deptno,job,avg(sal) from emp
  2  group by cube(deptno,job);

    DEPTNO JOB         AVG(SAL)                                                 
---------- --------- ----------                                                 
                     2073.21429                                                 
           CLERK         1037.5                                                 
           ANALYST         3000                                                 
           MANAGER   2758.33333                                                 
           SALESMAN        1400                                                 
           PRESIDENT       5000                                                 
        10           2916.66667                                                 
        10 CLERK           1300                                                 
        10 MANAGER         2450                                                 
        10 PRESIDENT       5000                                                 
        20                 2175                                                 
        20 CLERK            950                                                 
        20 ANALYST         3000                                                 
        20 MANAGER         2975                                                 
        30           1566.66667                                                 
        30 CLERK            950                                                 
        30 MANAGER         2850                                                 

    DEPTNO JOB         AVG(SAL)                                                 
---------- --------- ----------                                                 
        30 SALESMAN        1400                                                 

18 rows selected.


3.grouping 函数用于确定统计结果是否用到了特定列

SQL> select deptno,job,avg(sal),grouping(deptno),grouping(job)
  2  from emp group by rollup(deptno,job);

    DEPTNO JOB         AVG(SAL) GROUPING(DEPTNO) GROUPING(JOB)                  
---------- --------- ---------- ---------------- -------------                  
        10 CLERK           1300                0             0                  
        10 MANAGER         2450                0             0                  
        10 PRESIDENT       5000                0             0                  
        10           2916.66667                0             1                  
        20 CLERK            950                0             0                  
        20 ANALYST         3000                0             0                  
        20 MANAGER         2975                0             0                  
        20                 2175                0             1                  
        30 CLERK            950                0             0                  
        30 MANAGER         2850                0             0                  
        30 SALESMAN        1400                0             0                  
        30           1566.66667                0             1                  
                     2073.21429                1             1                  

13 rows selected.


4.grouping sets可以合并多个分组的统计结果

示例:显示部门平均工资和岗位平均工资

SQL> select deptno,job,avg(sal) from emp
  2  group by grouping sets(deptno,job);

    DEPTNO JOB         AVG(SAL)                                                 
---------- --------- ----------                                                 
           ANALYST         3000                                                 
           CLERK         1037.5                                                 
           MANAGER   2758.33333                                                 
           PRESIDENT       5000                                                 
           SALESMAN        1400                                                 
        10           2916.66667                                                 
        20                 2175                                                 
        30           1566.66667                                                 

8 rows selected.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值