分组统计
作用:主要针对一组数据进行分别的统计,例如,统计各个部门的雇员人数。
SELECT deptno,count(*) FROM emp GROUP BY deptno ;
作用:主要针对一组数据进行分别的统计,例如,统计各个部门的雇员人数。
SELECT deptno,count(*) FROM emp GROUP BY deptno ;
统计函数:
• count():求出记录的总和
• avg():求出平均值
• max():求出最大值
• min():求出最小值
• sum():求和
SELECT avg(sal) 平均工资 FROM emp ;
SELECT sum(sal) 工资总和 FROM emp ;
SELECT max(sal) 最高工资 FROM emp ;
SELECT min(sal) 最低工资 FROM emp ;
SELECT count(empno) 雇员人数 FROM emp ;
• count():求出记录的总和
• avg():求出平均值
• max():求出最大值
• min():求出最小值
• sum():求和
SELECT avg(sal) 平均工资 FROM emp ;
SELECT sum(sal) 工资总和 FROM emp ;
SELECT max(sal) 最高工资 FROM emp ;
SELECT min(sal) 最低工资 FROM emp ;
SELECT count(empno) 雇员人数 FROM emp ;
求出每个部门的平均工资:
SELECT deptno,avg(sal) FROM emp GROUP BY deptno ;
上面已经求出了所有雇员的平均工资,现在要求平均工资按由高到低的顺序进行排序
SELECT deptno,avg(sal) FROM emp GROUP BY deptno ORDER BY avg(sal) desc ;
SELECT deptno,avg(sal) FROM emp GROUP BY deptno ;
上面已经求出了所有雇员的平均工资,现在要求平均工资按由高到低的顺序进行排序
SELECT deptno,avg(sal) FROM emp GROUP BY deptno ORDER BY avg(sal) desc ;
SELECT deptno,count(empno) FROM emp ; 此语句不能执行,因为分组函数可以单独出现,但是如果要与其他字段同时出现,必须有group by,即:分组函数中要查询更多内容,则只能写group by 。
要求:
要求查询出平均工资高于2000的部门编号及平均工资。
SELECT deptno,avg(sal) FROM emp WHERE avg(sal)>2000 GROUP BY deptno ;
以上代码出错了,提示:ORA-00934: 此处不允许使用分组函数
如果要对分组进行条件过滤,则只能编写HAVING子句,此子句是写在GROUP BY 语句之中的。以上代码应该按如下编写:
SELECT deptno,avg(sal) FROM emp GROUP BY deptno HAVING avg(sal)>2000 ;
要求查询出平均工资高于2000的部门编号及平均工资。
SELECT deptno,avg(sal) FROM emp WHERE avg(sal)>2000 GROUP BY deptno ;
以上代码出错了,提示:ORA-00934: 此处不允许使用分组函数
如果要对分组进行条件过滤,则只能编写HAVING子句,此子句是写在GROUP BY 语句之中的。以上代码应该按如下编写:
SELECT deptno,avg(sal) FROM emp GROUP BY deptno HAVING avg(sal)>2000 ;
要求:
查询出部门内最高工资大于2900的部门
SELECT deptno,max(sal) FROM emp GROUP BY deptno HAVING max(sal)>2900 ;
查询出部门内最高工资大于2900的部门
SELECT deptno,max(sal) FROM emp GROUP BY deptno HAVING max(sal)>2900 ;
要求:
显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列:
SELECT job,SUM(sal) FROM emp WHERE job<>'SALESMAN' GROUP BY job HAVING SUM(sal)>5000 ORDER BY SUM(sal) ;
显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列:
SELECT job,SUM(sal) FROM emp WHERE job<>'SALESMAN' GROUP BY job HAVING SUM(sal)>5000 ORDER BY SUM(sal) ;
要求:查询出平均工资最高的部门
SELECT MAX(AVG(sal)) FROM emp GROUP BY deptno ;
SELECT MAX(AVG(sal)) FROM emp GROUP BY deptno ;
本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/91211,如需转载请自行联系原作者