多表查询
分组统计
● 分组统计
- 分组统计需要使用 GROUP BY 来分组
- 语法:
SELECT * |列名 FROM 表名 {WEHRE 查询条件} {GROUP BY 分组字段,分组字段1,...} ORDER BY 列名1 ASC|DESC,列名2...ASC|DESC
范例:部门人数大于 5 人的部门
- 分析:需要给 count(ename) 加条件,此时在本查询中不能使用 where,可以使用 HAVING。
- 示例图:
范例:查询出部门平均工资大于 2000 的部门
- 示例图:
范例:显示非销售人员工作名称以及从事同一工作的员工的月工资的总和,并且要满足从事同一工作月工资总和大于 5000,结果按月工资总和的升序排列。
- 分析:
1、查询出非销售人员
2、以步骤1为基础按着工作分组求工资的总和
3、以步骤2为基础查询出月工资总和大于5000的工作
4、按着月工资的总和的升序排列 - 示例图:
注意:只有分组条件在结果集中是重复的分组才有意义。
以上操作完整源码:
--部门人数大于 5 人的部门
select count(*) empnum, d.deptno, d.dname, d.loc
from emp e, dept d
where e.deptno = d.deptno
group by d.deptno, d.dname, d.loc
having count(*) > 5;
--查询出部门平均工资大于 2000 的部门
select avg(sal), deptno
from emp
group by deptno
having avg(sal) > 2000
--显示非销售人员工作名称以及从事同一工作的员工的月工资的总和,
--并且要满足从事同一工作月工资总和大于5000,结果按月工资总和的升序排列。
select sum(e.sal), e.job
from emp e
where e.job <> 'SALESMAN'
group by e.job
having sum(e.sal) > 5000
order by sum(e.sal) asc
如有错误,欢迎指正!