分组统计查询
2017年11月13日
20:36
统计函数
统计个数:count(* | [distinct]字段)
–count(*):明确地返回表中的数据个数,是最准确的。
–count(字段):不统计为null的数据个数。
–count([distinct]字段):统计消除重复数据后的数据个数。
max(字段)、min(字段)
sum(字段)、avg(字段)
分组统计查询
分组是部分数据具有共性。
分组子句group by
group by 分组字段,分组字段
select job,count(empno),avg(sal)
from emp
group by(job) ;
分组操作存在严格的限制
1、在没有编写group by子句的时候,那么select子句之中只允许出现统计函数,不允许出现任何的其他字段。
错误代码 |
正确代码 |
select count(empno),ename from emp ; |
select count(empno) from emp ; |
2、在使用group by子句分组字段的时候,select子句中只允许出现统计函数和分组字段
select job,count(empno),ename from emp group by job ; |
select job,count(empno) from emp group by job ; |
3、统计函数允许嵌套查询,但是嵌套后的统计查询中,select 子句里面不允许再出现任何的字段,包括分组字段,只能够使用嵌套的统计函数。
select deptno,max(avg(sal)) from emp group by deptno ; |
select max(avg(sal)) from emp group by deptno ; |
selectd.deptno,d.dname,d.loc,count(e.empno),trunc(avg(months_between(sysdate,hiredate)/12))year
from dept d,emp e
where d.deptno = e.deptno(+)
group by d.deptno,d.dname,d.loc ;
having子句对分组后的数据筛选
【⑤确定要显示的数据列】select [distinct] 分组字段[别名],…| 统计函数
【①确定要查找的数据来源】from
【②针对数据进行筛选】where 条件
【③针对数据进行分组】group by 分组字段,分组字段,….
【④对分组后的数据筛选】having 条件
【⑥对返回结果排序】order by 字段 [asc | desc],…,…