乐趣区

PLSQL-练习题1计算满足条件的人数

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

分析:这里所有的信息都来自 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
退出移动版