group by与having子句

53 篇文章 1 订阅
34 篇文章 0 订阅
group by子句
     有些情况下。需要把一个表中的行分为多个组,然后将这个组作为一个整体,获得改组的一些信息,例如,获得各个部门的员工人数,或某个部门的员工的平均工资等,这时,就需要使用group by子句子句对表中的数据进行分组。
     使用group by子句,可以根据表中的某一列或某几列队表中的数据行进行分组,多个列之间使用逗号分隔,如果根据多个列进行分组,oracle会首先根据第一列进行分组,然后再分出来的组中在按照第二列进行分组,以此类推。
     对数据分组后,主要是使用一些聚合函数对分组后的数据进行统计。
具体的操作如下:
SQL> select empno,deptno from emp;


     EMPNO     DEPTNO
---------- ----------
      7369         20
      7499         30
      7521         30
      7566         20
      7654         30
      7698         30
      7782         10
      7788         20
      7839         10
      7844         30
      7876         20
      7900         30
      7902         20
      7934         10
      7935         20
如上面的数据所示,在deptno在的数据值只有10,20,30,那么如果我们想统计下属于部门10,20,30的各个部门各有多少人,我们可以使用以下的语句:
SQL> select deptno "部门编号",count(*) "部门人数" from emp group by deptno;


  部门编号   部门人数
---------- ----------
        30          6
        20          6
        10          3
我们也可以统计各个部门的平均工资,如下:
SQL> select deptno,avg(sal) from emp group by deptno;


    DEPTNO   AVG(SAL)
---------- ----------
        30 1708.33333
        20 2645.83333

        10 2916.66667

group by和having的使用。

having子句
having子句通常与group by子句一起使用,在完成对分组结果的统计后,可以使用having子句对分组的结果进行进一步的筛选。
一个having子句最多可以包含40个表达式,having子句的表达式之间使用关键字and和or分隔。
如下所示,对已经完成分组的部门,我们选出部门人数大于5的部门。
SQL> select deptno "部门编号",count(*) "部门人数" from emp group by deptno having count(*)>5;


  部门编号   部门人数
---------- ----------
        30          6
        20          6
分组后选出部门编号大于10的部门
SQL> select deptno,avg(sal) from emp group by deptno having deptno>10;


    DEPTNO   AVG(SAL)
---------- ----------
        30 1708.33333
        20 2645.83333

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值