查询出每个部门中,工资从高到低进行排名,工资部门排名在前 50%的员工

1.查询出每个部门中,工资从高到低进行排名,工资部门排名在前 50%的员工(比如部门有6个人,则前50%,则是前3名,如果部门人数为奇数,向下取整确定前 50%的人数),如果其入职天数早于部门平均入职天数,还要列出其入职天数。如果其入职时间晚于部门平均入职天数,则入职天数显示为空 要求查询的结果格式:部门名称,员工,工资,部门排名,入职天数

 

 1.先利用窗口函数,求出基础数据列

2. 筛选前50%的员工,且对入职天数做进一步处理

代码: 

WITH DepartmentStats AS (  
    SELECT  
		    员工id,
				员工姓名,
        部门名称,  
				入职时间,
				工资,
        COUNT(*) over(partition by 部门名称) AS 部门人数,  
			  row_number () over(partition by 部门名称 order by 工资 desc) as 部门排名,
        row_number () over(partition by 部门名称 order by 工资 desc)/COUNT(*) over(partition by 部门名称)  as 部门占比, 
				-- 部门排名/部门人数
				DATEDIFF(CURDATE(), DATE_FORMAT(CAST(入职时间 AS DATETIME), '%Y-%m-%d') ) AS 入职天数,
			  avg(DATEDIFF(CURDATE(), DATE_FORMAT(CAST(入职时间 AS DATETIME), '%Y-%m-%d') )) over(partition by 部门名称) AS 平均入职天数		
    FROM  
        emp  
)
select 部门名称, 员工id,员工姓名,工资,部门排名,case when 入职天数>平均入职天数 then 入职天数 end as 入职天数
from  DepartmentStats t
where 部门占比<=0.5 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值