分組統計
作用:主要針對一組資料進行分别的統計,例如,統計各個部門的雇員人數。
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,如需轉載請自行聯系原作者