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

题目分析

本题要求找出绩效分数高于本部门平均绩效分数的员工,输出员工ID、部门名称和绩效分数。
输出字段

  • employee_id(员工ID)
  • department_name(部门名称)
  • performance_score(绩效分数)

输出顺序:按员工ID升序(order by employee_id)。
涉及知识点

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

解答步骤

1. 关联员工项目与部门信息

  • employee_projects 员工项目表与 department_info 部门信息表通过员工ID连接,获取每个员工的部门信息。
from employee_projects e
join department_info d on e.employee_id = d.employee_id

2. 计算每个部门的平均绩效分数

  • 用窗口函数 avg(performance_score) over(partition by d.department_name),计算每个部门的平均绩效分数。
avg(performance_score) over(partition by d.department_name) as avg_ps

3. 筛选绩效分数高于部门平均分的员工

  • 在子查询中,筛选出绩效分数大于本部门平均绩效分数的员工。
where performance_score > avg_ps

4. 输出与排序

  • 输出员工ID、部门名称、绩效分数。
  • 按员工ID升序排序。
select employee_id, department_name, performance_score
order by employee_id

完整代码

select employee_id, department_name, performance_score
from (
    select e.employee_id, d.department_name, e.performance_score,
    avg(performance_score) over(partition by d.department_name) as avg_ps
    from employee_projects e
    join department_info d on e.employee_id = d.employee_id 
) d
where performance_score > avg_ps
order by employee_id

近似题目练习推荐

评估2023年不同品牌商品的销售趋势和客户满意度

  • 知识点:窗口函数、分组聚合、JOIN、条件筛选

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