当前位置:
文档之家› Oracle数据库-第7章-分组统计查询
Oracle数据库-第7章-分组统计查询
分组统计 —— 范例
查询出公司各个工资等级雇员的数量、平均工资。
SELECT s.grade,COUNT(e.empno), ROUND(AVG(e.sal),2) FROM emp e,salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal GROUP BY s.grade ;
按照雇员的职位进行分组,job字段内容重复; 按照雇员所在的部门分组,deptno字段内容重复;
分组统计语法
SELECT [DISTINCT] 分组字段 [AS] [列别 名] ,... | 统计函数 [AS] [别名] , …. FROM 表名称1 [表别名1] , 表名称2 [表别名2] …. [WHERE 条件(s)] [GROUP BY 分组字段] [ORDER BY 排序字段 ASC|DESC] ;
注意事项二:在统计查询之中,SELECT子句后只允许出现分 组字段和统计函数,而其他的非分组字段不能使用。
错误的范例: SELECT deptno,ename,COUNT(empno) FROM emp GROUP BY deptno ; 正确的范例: SELECT deptno, COUNT(empno) FROM emp GROUP BY deptno ;
8 STDDEV(列)
返回标准差
统计函数 —— 范例
查找出公司每个月支出的月工资的总和
SELECT SUM(sal) FROM emp ;
统计函数 —— 范例
查询出公司的最高工资、最低工资、平均工资
SELECT AVG(sal), ROUND(AVG(sal),2), MAX(sal), MIN(sal) FROM emp ;
SELECT COUNT(*) , COUNT(ename) , COUNT(comm) , COUNT(DISTINCT job) FROM emp ;
统计函数 —— 范例
验证三种COUNT()函数的使用方式
SELECT COUNT(ename) , AVG(sal) , SUM(sal) , MAX(sal) , MIN(sal) FROM bonus ;
统计工资的标准差与方差
SELECT STDDEV(sal),VARIANCE(sal) FROM emp ;
统计函数 —— 范例
统计出公司的雇员人数
SELECT COUNT(empno) , COUNT(*) FROM emp ;
统计函数 —— 范例
验证COUNT(*)、COUNT(字段)、COUNT(DISTINCT 字段)的使用区别
分组统计 —— 范例
统计出每个部门的人数
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno ;
分组统计 —— 范例
统计出每种职位的最低和最高工资
SELECT job , MIN(sal) , MAX(sal) FROM emp GROUP BY job ;
分组注意事项
注意事项一:如果没有GROUP BY子句,则在SELECT子句之中 只允许出现统计函数,其他任何字段都不允许出现。
错误的范例: SELECT deptno , COUNT(empno) FROM emp ; 正确的范例: SELECT COUNT(empno) FROM emp ;
注意事项三:统计函数允许嵌套使用,但是嵌套统计函数之 后的SELECT子句之中不允许再出现任何的字段,包括分组字 段。
正确的范例:SELECT MAX(AVG(sal)) FROM emp GROUP BY deptno ; 错误的范例: SELECT deptno,MAX(AVG(sal)) FROM emp GROUP BY deptno ;
统计函数 —— 范例
统计出公司最早雇佣和最晚雇佣的雇佣日期
SELECT MIN(hiredate) 最早雇佣日期 , MAX(hiredate) 最晚雇佣日期 FROM emp ;
统计函数 —— 范例
统计公司工资之中中间的工资值
SELECT MEDIAN(sal) FROM emp ;
统计函数 —— 范例
小结
五个核心的统计函数:COUNT()、AVG()、 SUM()、MIN()、MAX()。
什么时候需要分组?
对于分组这个概念在生活之中往往会听见以下 的需要:
需求一:在一个班级之中,要求男女各一组进行 辩论赛;
需求二:在公司中,要求每个部门一组进行拔河 比赛;
针对于emp表数据分析
emp数据就可以根据不同的需要进行如下的分 组:
分组统计 —— 范例
查询每个部门的名称、部门人数、部门平均工资、平 均服务年限
SELECT d.dname, COUNT(e.empno) , ROUND(AVG(e.sal),2) avgsal, ROUND(AVG(MONTHS_BETWEEN(SYSDATE,e.hiredate) / 12),2) avgyear FROM dept d,emp e WHERE e.deptno(+)=d.deptno GROUP BY d.dname;
Oracle数据库
第7章:分组统计查询
统计函数
No.
组函数
描述
1
COUNT(* 列)
|
[DISTINCT]求出全部的记录数
2 SUM(列)
求出总和,操作的列 是数字
3 AVG(列)
平均值
4 MAX(列)
最大值
5 MIN(列)
最小值
6 MEDIANANCE(列)
返回方差
分组统计 —— 范例
统计出领取佣金与不领取佣金的雇员的平均工资、平 均雇佣年限、雇员人数。
SELECT '不领取佣金', ROUND(AVG(sal),2) avgsal, ROUND(AVG(MONTHS_BETWEEN(SYSDATE,hiredate)/12),2) avgyear,COUNT(empno) count FROM emp WHERE comm IS NOT NULL UNION SELECT '领取佣金', ROUND(AVG(sal),2) avgsal, ROUND(AVG(MONTHS_BETWEEN(SYSDATE,hiredate)/12),2)avgyear,COUNT (empno) count FROM emp WHERE comm IS NULL ;