天天看点

分组统计

分组统计

 作用:主要针对一组数据进行分别的统计,例如,统计各个部门的雇员人数。

 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 ;

求出每个部门的平均工资:

 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 ;

 查询出部门内最高工资大于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) ;

要求:查询出平均工资最高的部门

 SELECT MAX(AVG(sal)) FROM emp GROUP BY deptno ;

本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/91211,如需转载请自行联系原作者

下一篇: Bash技巧总结

继续阅读