基本统计函数的使用 count(*|字段|[distinct]) max(字段(日期或数字)) min(字段) sum(数字字段) avg(数字字段) |
--查询员工的最高工资和最低工资 select max(sal),min(sal) from emp e; --查询最晚和最早被雇佣的员工日期 select max(e.hiredate),min(e.hiredate) from emp e; --统计所有员工的总工资已经平均工资 select sum(e.sal),avg(e.sal) from emp e; ---统计员工的平均服务年限 select trunc(avg(months_between(Sysdate,e.hiredate))/12) from emp e; |
count(*),count(字段),count(distinct 字段)的区别; 1.count(*):明确的返回表中的数据个数;是最准确的; 2.count(字段):不统计为null的数据个数,如果某一列的数据不可能为空,那么结果与count(*)相同; 3.count(distinct 字段):统计消除重复数据后的数据个数 |
语法结构 分组统计查询 【5.确定要使用的数据列】select [distnct]分组字段[别名],....|统计函数 |
---按照职位分组,统计每个职位的名称,人数,平均工资; select job,count(*),avg(sal) from emp group by job; ---要求查询出每个部门编号,以及每个部门的人数、最高和最低工资 select c.deptno,count(*),max(sal),min(sal) from emp c group by c.deptno; |
---分组统计查询的限制 1.在没有编写group by 子句的时候(全部作为一组),那么select子句中只允许出现统计函数,不允许出去任何的其他字段 错误写法: select count(*),ename from emp; 2.在使用group by字句分组的时候,select子句之中只允许出现分组字段和统计函数,其他字段不允许出现; 错误写法:select job,count(*),ename from emp e group by job; 3.统计查询允许嵌套查询,但是嵌套后的统计查询中,select子句里不允许再出现任何的字段,包括分组字段,只能使用嵌套的统计函数; |
错误写法: select e.deptno,Max(avg(sal)) from emp e group by deptno; 正确写法 select Max(avg(sal)) from emp e group by deptno; |
---分组查询(多表查询) 步骤: |
--查询每个部门的名称,平均工资,人数 select d.dname,avg(sal),count(*)
|
--1.where和having的区别? --a.where 发生在Group by操作之前,属于分组前的数据筛选;where子句不允许使用统计函数; |
---显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,
错误代码 |
总结 1.不管是单表分组还是多表分组,重点看重复列,如果是一个重复列在group by后加一个字段,如果有多个重复再group by后添加多个字段; 2.分组中的使用限制: a.分组函数嵌套后不允许出现任何字段; b.分组函数(统计函数)可以单独使用,只有在使用了Group by后,在select子句中才可以字段; 3.多表查询与分组统计查询的时候相当于是一张临时表,所有的分组是在这种临时表中完成的; |
Oracle 分组统计查询
猜你喜欢
转载自blog.csdn.net/qq_29393273/article/details/84947112
今日推荐
周排行