問題:
求每一個部門工資高於部門平均工資的員工數量佔整個部門人數的百分比 函數
分析:這裏全部的信息都來自EMP表,不用作錶鏈接。
其次,要新增一列按每一個部門的平均工資,這裏就用分析函數Avg()Over(Partiton by... ...) 接着,要計算百分比。分子是高出平均工資的人數,分母是整個部門的人數 code
關鍵字:
1)計算知足某條件的人數 累計求和
2)生成字段百分比字段it
難點之一: 如何寫出高出平均工資的人數?且保留有整張表全部人數的Count()
解決方法: CASE WHEN 知足的Count +1 不然0; 而後用全表做爲子查詢class
注意: 不要用Count , 由於這個只計數,並不會把符合條件的都求和方法
SELECT A.DEPTNO, TO_CHAR(ROUND(SUM(CASE WHEN A.SAL > A.AVG THEN 1 ELSE 0 END) / COUNT(*) * 100, 2), '99D99') || '%' AS 百分比 -- 由於要突出Count(*)是總人數,因此子查詢須要E.* FROM (SELECT E.*, AVG(E.SAL) OVER(PARTITION BY E.DEPTNO) AVG FROM EMP E) A GROUP BY A.DEPTNO