组函数:对查询的结果进行分组,每组给出一个输出结果(一行)
※ group by与having
group by 基于某列进行分组,标准就是列中值相同的分为一组
having 对分组之后输出的结果行进行限定,可以不出现,一出现只能在group by后面
※ 语法:
select
from table_name…
where 条件限定(对from查询的结果每一行筛选)
group by column_name,column_name1…
having 条件限定
order by
执行顺序:from->where->group by->having->select->order by
注意:
1.where后不能跟分组函数,where在group by后面执行
2.group by后面出现的列可以出现在select后面
group by后面没有出现的列一定不可以出现在select后面
3.组函只能出现在select ,having 和order by后面
※ 组函数(不用group by,组函数把整张表作为一个组看待)
※ 1. avg 求平均值
select avg([distinct] salary)
from s_emp;
(注:分组后select不能跟列)
※ 2. count统计多少行
select count([distinct] salary)
from s_emp;
※ 3. max求出组中的最大值 /min求出组中的最小值
select max(salary),min(salary)
from s_emp;
※ 4. stddev标准差
select stddev(salary)
from s_emp;
※ 5. sum求和
select sun(salary)
from s_emp;
※ 6. variance方差
select variance(salary)
from s_emp;
※ 组函数和group by结合,按照某列分组
※ 1. avg 求平均值
求出每一部门的平均工资
select avg([distinct] salary),dept_id
from s_emp
group by dept_id;
(注:分组后select不能跟列)
※ 2. count统计多少行
每一部门
select count([distinct] salary)
from s_emp
group by dept_id;
※ 3. max求出组中的最大值 /min求出组中的最小值
每一部门薪水最大、最小值
select max(salary),min(salary)
from s_emp
group by dept_id;
※ 4. stddev标准差
每一部门薪水标准差
select stddev(salary)
from s_emp
group by dept_id;
※ 5. sum求和
每一部门薪水求和
select sun(salary)
from s_emp
group by dept_id;
※ 6. variance方差
每一部门薪水方差
select variance(salary)
from s_emp
group by dept_id;
※ 案例:
查询s_emp表中部门的平均工资大于、等于1400的部门
select avg(salary),dept_id
from s_emp
group by dept_id
having avg(salary)>=1400
order by avg(salary) asc;
查询s_emp表中部门的平均工资大于等于1400的部门,并且显示出这些部门的名字,同时按照部门编号排序
select avg(s.salary),s.dept_id,d.name
from s_emp s,s_dept d
where s.dept_id=d.id
group by s.dept_id(d.id),d.name
having avg(s.salary)>=1400
order by s.dept_id asc;