问题:
求每个部门工资高于部门平均工资的员工数量占整个部门人数的百分比

分析:这里所有的信息都来自EMP表,不用做表连接。
其次,要新增一列按每个部门的平均工资,这里就用分析函数Avg()Over(Partiton by... ...) 接着,要计算百分比。分子是高出平均工资的人数,分母是整个部门的人数

关键字:
1)计算满足某条件的人数 累计求和
2)生成字段百分比字段


难点之一: 如何写出高出平均工资的人数?且保留有整张表所有人数的Count()
解决方法: CASE WHEN 满足的Count +1 否则0; 然后用全表作为子查询


注意: 不要用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

蜗牛
27 声望13 粉丝