天天看點

分組統計

分組統計

 作用:主要針對一組資料進行分别的統計,例如,統計各個部門的雇員人數。

 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技巧總結

繼續閱讀