目录
分组统计
根据部门编号分组,查询每个部门的编号、人数、平均工资
根据职位分组,统计出每个职位的人数、最低工资与最高工资
如果查询不使用 GROUP BY 子句,那么 SELECT 子句中只允许出现统计函数,其他任何字段不允许出现
如果查询中使用了 GROUP BY 子句,那么 SELECT 子句中只允许出现分组字段、统计函数,其他任何字段都不允许出现
统计函数允许嵌套,但是嵌套之后的 SELECT 子句里面只允许出现嵌套函数,而不允许出现其他任何字段,包括分组字段
Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645
分组统计
下面来介绍一下分组统计。什么是分组统计?什么情况下可以分组?
例如,部门之间进行拔河比赛,那么分组的依据就是部门,因为每个员工都有相同的部门编号
例如,上厕所,男女各一边,实际上这也是一个分组
那么也就证明了一点:分组的前提是存在重复
select [distinct] * | 分组列 [ 别名 ] , 分组列 [ 别名 ] ...
from 表名称 [ 别名 ], 表名称 [ 别名 ],...
[where 限定条件 (s)]
[group by 分组字段 , 分组字段 , 分组字段 ,...]
[order by 排序字段 [asc | desc], 排序字段 [asc | desc],...]
这个语法格式是在前面语法格式基础上又增加了一行条件,
即 group by 子句,主要实现对筛选的行分组。其他行的作用和以前的完全一样
根据部门编号分组,查询每个部门的编号、人数、平均工资
SQL> select deptno,count(*),avg(sal)
2 from emp
3 group by deptno;
DEPTNO COUNT(*) AVG(SAL)
---------- ---------- ----------
30 6 1566.66667
10 3 2916.66667
20 3 2258.33333
根据职位分组,统计出每个职位的人数、最低工资与最高工资
SQL> select job,count(*),min(sal),max(sal)
2 from emp
3 group by job;
JOB COUNT(*) MIN(SAL) MAX(SAL)
------------------ ---------- ---------- ----------
CLERK 3 800 1300
SALESMAN 4 1250 1600
ANALYST 1 3000 3000
MANAGER 3 2450 2975
PRESIDENT 1 5000 5000
实际上,group by 子句之所以使用着比较麻烦,是因为分组的时候有一些约束条件
如果查询不使用 GROUP BY 子句,那么 SELECT 子句中只允许出现统计函数,其他任何字段不允许出现
如果查询中使用了 GROUP BY 子句,那么 SELECT 子句中只允许出现分组字段、统计函数,其他任何字段都不允许出现
统计函数允许嵌套,但是嵌套之后的 SELECT 子句里面只允许出现嵌套函数,而不允许出现其他任何字段,包括分组字段