SQL
多表查询
分组统计
● 分组统计
- 分组统计需要使用 GROUP BY 来分组
- 语法:
SELECT * |列名 FROM 表名 {WEHRE 查询条件} {GROUP BY 分组字段,分组字段1,...} ORDER BY 列名1 ASC|DESC,列名2...ASC|DESC
-
范例:查询每个部门的人数
-
示例图:
-
范例:查询出每个部门的平均工资
-
示例图:
-
如果我们想查询出来部门编号,和部门下的人数:
出现 ORA-00937 的错误!
需要添加分组:
注意:
- 如果使用分组函数,SQL 只可以把 GOURP BY 分组条件字段和分组函数查询出来,不能有其他字段。
- 如果使用分组函数,不使用 GROUP BY 只可以查询出来分组函数的值。
- 示例图:
- 在分组统计的的时候除了分组函数以外,结果列必须是 group by 后面分组的列(后面有的列前面才能有,后面没有前面绝对不能有)。
范例:分组查询每个部门下从事每种工作的人数
- 示例图:
以上操作完整源码:
-- 没分组的大组
select count(empno) from emp;
--由查询结果来看,可以根据部门编号分组
select * from emp order by deptno;
--分组统计人数
select count(empno), deptno from emp group by deptno;
--查询每个部门的平均工资
select avg(empno) avgsal, deptno from emp group by deptno;
select count(*), deptno from emp;
--会报错,因为没有group by分组所以统计函数统计的是整张表的 数据,
--我们却非要强加在部门编号上是不对的,所以想要查询出来部门下的统计信息就必须要分组
--需要添加分组
select count(*), deptno from emp group by deptno;
--分组查询出记录数,部门编号,部门名称
select count(*), d.deptno, d.dname
from emp e, dept d
where e.deptno = d.deptno
group by d.deptno,d.dname;
--分组查询每个部门下从事每种工作的人数
select count(*), deptno, job
from emp
group by deptno, job
order by deptno;
如有错误,欢迎指正!