zoukankan      html  css  js  c++  java
  • Oracle 聚合函数

    聚合函数
    SQL中提供的聚合函数可以用来统计、求和、求最值等等。

    此处采用Oracle 11g中其他用户SCOTT中的EMP表,进行演示。

    COUNT统计行数量

    COUNT(*)统计的是结果集的总条数,而count(字段)统计的是该字段中不为null的总条数

    1、查询有多少岗位

    1 selete count(distinct job) from emp;

    2、查询员工总数 入职时间 最高工资 工资总额 平均工资

    1 selete count(empno),
    2 to-char(min(hiredate),'yyyy-mm-dd')||'----'||to_char(max(hiredate),'yyyy-mm-dd') as 入职时间,
    3 max(sal),sum(sal),avg(sal)
    4 from emp; 

    SUM:获取单个列的合计值

    3、查询工资总额

    1 selete sum(sal) from emp;

    AVG:计算某个列的平均值
    MAX:计算列的最大值
    MIN:计算列的最小值

    4、查询最早入职时间

    1 selete min(hiredate) from emp;

    group by 分组函数 一般与聚合函数组合用

    5、查询每个岗位最高工资

    1 selete job,max(sal) from emp group by job;

    6、查询岗位平均工资>2500

    易错:

    1 select job,avg(sal)
    2 from emp
    3 group by job
    4 where sal>2500

    当改写成:

    1  select job,avg(sal)
    2  from emp
    3  where sal>2500
    4  group by job

    执行结果:

    虽然能执行出结果,但是它是将所有大于2500的工资的岗位,集合在一起,算平均工资,不符合要求。

    应该改成:

    1 select job,avg(sal)
    2 from emp
    3 group by job
    4 having round(avg(sal))>2500

    执行结果:

    wherehaving的区别

    • where仅仅用于处理从from子句中返回的值。
    • having子句通常是与order by子句一起使用的,因为having的作用是对使用group by进行分组统计后的结果再进行下一步的筛选。

    7、查询每个部门员工的平均工资 最高工资 工资总额 根据工资总额排序

    1 selete deptno ,round(avg(sal)),max(sal),sum(sal)
    2 from emp
    3 group by deptno
    4 order by sum(sal)

    执行结果:

    总结:SQL的执行顺序:
             –第一步:执行FROM
             –第二步:WHERE条件过滤
             –第三步:GROUP BY分组
             –第四步:执行SELECT投影列
             –第五步:HAVING条件过滤
             –第六步:执行ORDER BY 排序

  • 相关阅读:
    元素的隐藏和显示
    dateformat-参数表
    HTTP缓存控制小结
    Shell 快捷键
    PHP中的cURL库
    选择排序法
    双系统重装windows后如何恢复ubuntu启动项
    dell 3420 独立显卡黄色感叹号不能用问题
    YUY数据转换为RGB数据,并进行灰度化处理显示
    ubuntu 15.04安装显卡驱动,出现登录界面闪烁得解决方案(dell 3420 )
  • 原文地址:https://www.cnblogs.com/echola/p/9513449.html
Copyright © 2011-2022 走看看