SQL大神带你飞 | 24春招京东SQL真题解析-分析每个员工在不同项目中的绩效情况

分析每个员工在不同项目中的绩效情况

https://www.nowcoder.com/practice/fa64fd2eb40d4639bc23dfb1ffae2163

最近做了京东的24年春招题,题目如下: alt alt

题目分析

本题要求统计2024年上半年(2024-01-01 至 2024-07-01)启动的每个项目组内,员工的绩效分数及其在项目组内的排名,并输出员工ID、姓名、绩效分数、项目组内排名、部门和项目组名称。
输出字段

  • employee_id(员工ID)
  • employee_name(员工姓名)
  • first_half_2024_score(2024年上半年绩效分数)
  • project_group_rank(项目组内绩效排名,分数高者优先,分数相同按员工ID升序)
  • department(部门)
  • project_group(项目组名称)

输出顺序

  • 先按项目ID升序(p.project_id)
  • 再按项目组内排名升序(project_group_rank)
  • 最后按员工ID升序(e.employee_id)

涉及知识点

  • SQL 多表连接(JOIN)
  • 条件筛选(WHERE)
  • 窗口函数(ROW_NUMBER() OVER PARTITION BY ... ORDER BY ...)
  • 字段别名与排序(ORDER BY)

解答步骤

1. 关联员工、绩效和项目表

  • performance 绩效表与 employees 员工表通过员工ID连接,获取员工信息。
  • 再与 projects 项目表通过项目ID连接,获取项目名称。
from performance pe
join employees e on e.employee_id = pe.employee_id
join projects p on p.project_id = pe.project_id

2. 筛选2024年上半年启动的项目

  • 只保留项目启动时间在2024-01-01至2024-07-01之间的项目。
where p.start_date between '2024-01-01' and '2024-07-01'

3. 计算项目组内绩效排名

  • 用窗口函数 row_number() over(partition by p.project_id order by pe.performance_score desc, e.employee_id),在每个项目组内按绩效分数降序排名,分数相同则员工ID小的排前。
row_number() over(partition by p.project_id order by pe.performance_score desc, e.employee_id) as project_group_rank

4. 输出与排序

  • 输出员工ID、姓名、绩效分数、项目组内排名、部门、项目组名称。
  • 按项目ID、项目组内排名、员工ID排序。
order by p.project_id, project_group_rank, e.employee_id

完整代码

select e.employee_id, e.employee_name,
pe.performance_score as first_half_2024_score,
row_number() over(partition by p.project_id order by pe.performance_score desc, e.employee_id) as project_group_rank,
e.department,
p.project_name as project_group
from performance pe
join employees e on e.employee_id = pe.employee_id
join projects p on p.project_id = pe.project_id
where p.start_date between '2024-01-01' and '2024-07-01'
order by p.project_id, project_group_rank, e.employee_id

近似题目练习推荐

每个顾客最近一次下单的订单信息

  • 知识点:窗口函数、分组排名、JOIN

查找入职员工时间升序排名的情况下的倒数第三的员工所有信息

  • 知识点:窗口函数、分组、排序

获取当前薪水第二多的员工的emp_no以及其对应的薪水

  • 知识点:窗口函数、分组、排序

如需更多类似题目,可在牛客网SQL练习区进行练习。

全部评论

相关推荐

08-21 16:35
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
09-18 12:13
已编辑
门头沟学院 产品经理
火猴大圣:不要委屈自己,进去看一看 。。。 这样你才能彻底死心
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务