分组查询
1.分组函数 select avg(salary) from s_emp;
select count(2) from s_emp; 记录2次
select sum(2) from s_emp;
select sum(salary*(1+0.2) from s_emp;
select count(distinct name) from s_emp;以名字记录
2.分组查询
分组的注意事项:
select 列表要不出现在group by中,要么出现在字段
select manager_id from s_emp from group by manager_id;
select manager_id,count(id) from s_emp group by manager_id;函数不能出现在分组中
3.分组与分组函数的使用
3.1 关联中使用分组
打印部门名称与部门员工数
select name,count(s_emp.id) from s_emp,s_dept
where s_emp.id=s_dept.id
group by name;
select region.name,count(s_dept.id) from s_dept,s_region
where s_dept.region=s_region.id
group by s_region.name
select r.name,count(e.id)
from s_region r,s_dept d,s_emp e
where r.id=d.region_id and d.id=e.id
group by r.name;
查询什么,从那查询,查询的关联,是否分组
3.2 在select中可以使用分组函数,在where中可以使用吗
不可以
对分组怎么过滤
having过滤 紧跟group by
select d.name,avg(e.salary)
from s_dept d,s_emp e
where d.id=e.dept_id
//and avg(salary)>1000 错误!
group by d.name
having avg(salary)>1000;
总结:
select 查询内容
from 哪里查询
where 关联关系
and|or|not过滤条件
group by 分组方式
having 分组过滤
order by 排序
1.分组函数 select avg(salary) from s_emp;
select count(2) from s_emp; 记录2次
select sum(2) from s_emp;
select sum(salary*(1+0.2) from s_emp;
select count(distinct name) from s_emp;以名字记录
2.分组查询
分组的注意事项:
select 列表要不出现在group by中,要么出现在字段
select manager_id from s_emp from group by manager_id;
select manager_id,count(id) from s_emp group by manager_id;函数不能出现在分组中
3.分组与分组函数的使用
3.1 关联中使用分组
打印部门名称与部门员工数
select name,count(s_emp.id) from s_emp,s_dept
where s_emp.id=s_dept.id
group by name;
select region.name,count(s_dept.id) from s_dept,s_region
where s_dept.region=s_region.id
group by s_region.name
select r.name,count(e.id)
from s_region r,s_dept d,s_emp e
where r.id=d.region_id and d.id=e.id
group by r.name;
查询什么,从那查询,查询的关联,是否分组
3.2 在select中可以使用分组函数,在where中可以使用吗
不可以
对分组怎么过滤
having过滤 紧跟group by
select d.name,avg(e.salary)
from s_dept d,s_emp e
where d.id=e.dept_id
//and avg(salary)>1000 错误!
group by d.name
having avg(salary)>1000;
总结:
select 查询内容
from 哪里查询
where 关联关系
and|or|not过滤条件
group by 分组方式
having 分组过滤
order by 排序