按照必定标准把数据分红若干部分sql
from 表名 where 条件 group by 分组标准 (group标准的要写在where以后,没有where写在from以后)
语句:select dept_id,count(id) from s_emp group by dept_id;
select dept_id, count(id) from s_emp group by dept_id having count(id)>2 order by dept_id desc;
select dept_id, avg(salary) from s_emp group by dept_id having avg(salary)>1300;
在分组语句中,select后的字段要么是分组标准,要么是通过合适组函数处理过的内容函数
select dept_id, avg(salary), name from s_emp e, s_dept d where dept_id=d.id group by dept_id, name having avb(salary)>1300;
(存在一些问题)匹配显示次数问题3d
因此用组函数,由于组函数只会有一个结果, 若是用count:blog
select dept_id, avg(salary), count(name) from s_emp e, s_dept d where dept_id=d.id group by dept_id having avg(salary)>1300;
若是用max:排序
select dept_id, avg(salary), max(name) from s_emp e, s_dept d where dept_id=d.id group by dept_id having avg(salary)>1300;
由于可能会有的部门没有对应部门名,数据会丢失,则要所有显示部门表的内容,因此还要加上外链接。class
select dept_id, avg(salary), count(name) from s_emp e, s_dept d where dept_id=d.id(+) group by dept_id having avg(aslary)>1300;
(1)from 先找到要操做的表select
(2)where 会有过滤条件sql语句
(3)group by 分组确定在having以前语法
(4)having 对组数据进行过滤 经过下面举例的别名能够肯定having和select的执行顺序im
(5)select 查询输出(语法规则要求select写前面)
(6)order by 永远在最后
select dept_id, count(id) ac from s_emp group by dept_id having count(id)>2 order by ac;