关键词搜索

源码搜索 ×
×

Oracle 多行函数(聚合函数)和分组统计

发布2020-05-29浏览2469次

详情内容

一、聚合函数

多行函数 (聚合函数):作用于多行,返回一个值。

--这里的1表示主键那一列
select count(1) from emp;---查询总数量
select sum(sal) from emp;---工资总和
select max(sal) from emp;---最大工资
select min(sal) from emp;---最低工资
select avg(sal) from emp;---平均工资

    二、分组统计

    分组统计需要使用 GROUP BY 来分组

    语法:

    SELECT * |列名 FROM 表名 {WEHRE 查询条件} {GROUP BY 分组字段} ORDER BY 列名 1 ASC|DESC,
    列名 2...ASC|DESC
    
    • 1
    • 2

    分组查询中,出现在 group by 后面的原始列,才能出现在select后面
    没有出现在 group by 后面的列,想在 select 后面,必须加上聚合函数。
    聚合函数有一个特性,可以把多行记录变成一个值

    • 查询每个部门的人数
      在这里插入图片描述
    • 查询出每个部门的平均工资
      在这里插入图片描述
    • 如果我们想查询出来部门编号,和部门下的人数
      在这里插入图片描述
    • 按部门分组,查询出部门名称和部门的员工数量
      在这里插入图片描述
    • 查询出部门人数大于 5 人的部门
      分析:需要给 count(ename)加条件,此时在本查询中不能使用 where,可以使用 HAVING
      在这里插入图片描述
    • 查询出部门平均工资大于 2000 的部门
      在这里插入图片描述
    ---查询出平均工资高于2000的部门信息
    select e.deptno, avg(e.sal) asal
    from emp e
    group by e.deptno
    having avg(e.sal)>2000;
    ---所有条件都不能使用别名来判断,因为条件的优先级大于select,所以运行where时,别名还未成立
    --比如下面的条件语句也不能使用别名当条件
    select ename, sal s from emp where sal>1500;
    
    ---查询出每个部门工资高于800的员工的平均工资
    select e.deptno, avg(e.sal) asal
    from emp e
    where e.sal>800
    group by e.deptno;
    ----where是过滤分组前的数据,having是过滤分组后的数据。
    ---表现形式:where必须在group by之前,having是在group by之后。
    ---查询出每个部门工资高于800的员工的平均工资
    ---然后再查询出平均工资高于2000的部门
    select e.deptno, avg(e.sal) asal
    from emp e
    where e.sal>800
    group by e.deptno
    having avg(e.sal)>2000;
    
    
      7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载