问题:
求每一个部门工资高于部门平均工资的员工数量占整个部门人数的百分比 函数
分析:这里全部的信息都来自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