概述
分组函数是对表中一组记录进行操作,每组只返回一个结果,即首先要对表记录进行分组,然后再进行操作汇总。
MIN/MAX
返回每组的最小值个最大值
查询入职日期最早和最晚的日期。
select MIN(hiredate),MAX(hiredate)
from emp;
SUM/AVG
分别返回每组的总和及平局值
查询职位以sales开头的所有员工的平均工资、最低工资、最高工资和工资和。
select AVG(sal),MAX(sal),MIN(sal),SUM(sal)
from emp
where job LIKE 'SALES%';
COUNT
只要功能是返回满足条件的每组记录条数
查询部门30有多少员工
select COUNT(*)
from emp
where deptno=30;
也可以返回满足条件的非空行(null)数量
查询部门30有多少个员工领取奖金
select COUNT(comm)
from emp
where deptno=30;
DISTINCT
DISTINCT会消除重复记录后再使用分组函数
查询有员工的部门的数量(先去重后再计算数量)
select COUNT(DISTINCT deptno)
from emp;
组函数嵌套
示例:显示平均薪水的最大值
select max(avg(sal))
from emp
group by deptno;
注意:与单行函数不同,组函数只能嵌套两层
注意1:如果再查询中使用了组函数,任何不在组函数中的列或者表达式都必须包含在group by字句中。
错误示例:
select deptno, COUNT(ename)
from emp;
改正:
select deptno,COUNT(ename)
from emp
group by deptno;
注意2:不能在where字句中限制组,但可以通过having字句限制组
错误示例:
select deptno,max(sal)
from emp
where max(sal)>2900
group by deptno;
不能在where字句中限制组