聚合函数:
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
执行结果:
where和having的区别:
- 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 排序