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
标签:入职,partition,天数,over,50%,部门,工资,排名 From: https://blog.csdn.net/weixin_42698221/article/details/142068820