【字节跳动】统计上半年员工项目绩效排名
JOIN 连接聚合函数GROUP BY窗口函数日期函数ORDER BY用户行为分析排行榜面试真题
题目描述
来源:字节跳动 SQL 面试真题
公司需要分析员工在不同项目中的绩效情况,统计每位员工 2024 年上半年的项目绩效总评分,并计算其在项目内的绩效排名。
数据表
employees 员工表
| 字段 | 类型 | 说明 |
|---|---|---|
| employee_id | INT | 员工 ID,主键 |
| employee_name | VARCHAR(100) | 员工姓名 |
| department | VARCHAR(100) | 员工所属部门 |
projects 项目表
| 字段 | 类型 | 说明 |
|---|---|---|
| project_id | INT | 项目 ID,主键 |
| project_name | VARCHAR(100) | 项目名称 |
| start_date | DATE | 项目开始日期 |
performance 绩效表
| 字段 | 类型 | 说明 |
|---|---|---|
| performance_id | BIGINT | 绩效记录 ID,主键 |
| employee_id | INT | 员工 ID |
| project_id | INT | 项目 ID |
| performance_score | DECIMAL(10,2) | 员工在项目中的绩效评分 |
统计口径
- performance 表没有绩效日期,因此使用项目 start_date 作为时间锚点。
- 2024 年上半年范围为 [2024-01-01, 2024-07-01),即项目开始日期在 2024 年 1 月 1 日至 6 月 30 日。
- 同一员工在同一项目存在多条绩效记录时,先将 performance_score 求和。
- 使用 RANK() 按项目内绩效总评分降序排名,评分相同时并列;最终展示时同排名按 employee_id 升序。
- project_group 返回项目名称,department 返回员工所属部门。
期望输出列
| 列名 | 说明 |
|---|---|
| employee_id | 员工 ID |
| employee_name | 员工姓名 |
| first_half_2024_score | 2024 年上半年绩效总评分 |
| project_group_rank | 项目内绩效排名 |
| department | 所属部门 |
| project_group | 项目名称 |
数据样例
| employee_idPKINT | employee_nameVARCHAR(100) | departmentVARCHAR(100) |
|---|---|---|
| 1 | Alice | 技术部 |
| 2 | Bob | 技术部 |
| 3 | Carol | 数据部 |
| 4 | David | 数据部 |
| 5 | Eve | 产品部 |
输入数据显示 5 / 5 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里