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 排序

原文地址:https://www.cnblogs.com/echola/p/9513449.html