oracle 按条件求平均,【PL/SQL 练习题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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值