分组函数
min ( ) 最小值
例:查询员工工资最低的钱数 --(sal 列所有数据的最小值)
select min(sal) from emp
max ( ) 最大值
例:查询员工工资最高的钱数 --(sal 列所有数据的最大值)
select max(sal) from emp
avg ( ) 平均值
例:查询所有员工的平均工资 --(sal 列所有数据的平均值)
select avg(sal) from emp
注:如果为空值,则不计算在内
例如avg(comm)相当于 sum(comm)/count(comm) 而不等同于 sum(comm)/count(*)
sum ( ) 总和
例:查询所有员工的工资总和 --(sal 列所有数据的和)
select sum(sal) from emp
count ( ) 总数(查询到的数据(不为空的)条数)
例:查询公司员工总数
注:
count( * ) 只要这条数据不全为空,就计1
count(列名) 当本条数据的 ‘列名’ 列不为空 时计1
例:
select count(*) from emp —>(结果为14)
select count(comm) from emp —>(结果为4)
distinct 进行去重
先执行distinct去掉重复行后,再执行分组函数
例:查询emp表中总共有多少种岗位
select count(distinct job) from emp
按多列分组
关键词:group by
例:查询每个部门每个岗位的工资总和
select deptno,job,sum(sal),count(*) from emp group by deptno,job
注
select 子句在group by 子句之后执行
where 子句在group by子句之前执行
在group by子句 之前执行的子句 不能写分组函数
在group by分组之后 如果想加限定条件,只能使用having子句
例:按照部门编号分组 查询每个部门 工资最高值要求展示最高工资大于2900
select deptno,max(sal) from emp group by deptno having max(sal)>2900
查询语句执行顺序
from
where
group by
having
select
order by
limit
练习:
1.查询每个部门的部门编号,部门名称,部门人数,最高工资,最低工资,工资总和,平均工资。
select dept.deptno,dept.dname,count(),max(sal),min(sal),sum(sal),avg(sal) from emp join dept on(emp.deptno=dept.deptno) group by dept.deptno,dept.dname
2.查询每个部门,每个岗位的部门编号,部门名称,岗位名称,部门人数,最高工资,最低工资,工资总和,平均工资。
select b.deptno,b.dname,a.job,count(),max(sal),min(sal),sum(sal),avg(sal)
from emp a join dept b on(a.deptno=b.deptno)
group by deptno,job
3.查询每个经理所管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息。
select count(*),a.empno,a.ename from emp a right outer join emp b on(a.empno=b.mgr) group by a.empno,a.ename