最近做了京东的24年春招题,题目如下:
题目分析
本题要求找出绩效分数高于本部门平均绩效分数的员工,输出员工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
近似题目练习推荐
- 知识点:窗口函数、分组聚合、JOIN、条件筛选
如需更多类似题目,可在牛客网SQL练习区进行练习。