【携程】统计各岗位员工平均工作时长
JOIN 连接聚合函数GROUP BY日期函数ORDER BY用户行为分析面试真题
题目描述
来源:携程 SQL 面试真题
某公司需要根据员工信息和单日出勤记录,统计各岗位员工的平均工作时长。
数据表
staff_tb 员工信息表
| 字段 | 类型 | 说明 |
|---|---|---|
| staff_id | BIGINT | 员工 ID |
| staff_name | VARCHAR | 员工姓名 |
| staff_gender | VARCHAR | 员工性别 |
| post | VARCHAR | 员工岗位类别 |
| department | VARCHAR | 员工所在部门 |
attendent_tb 出勤信息表
| 字段 | 类型 | 说明 |
|---|---|---|
| info_id | BIGINT | 出勤信息 ID |
| staff_id | BIGINT | 员工 ID |
| first_clockin | DATETIME | 上班打卡时间;未打卡时为 NULL |
| last_clockin | DATETIME | 下班打卡时间;未打卡时为 NULL |
题目要求
- 计算每位员工当天的工作时长,单位为小时。
- 按岗位类别统计员工平均工作时长。
- first_clockin 或 last_clockin 为 NULL 的记录不参与统计。
- 平均工作时长四舍五入保留 3 位小数。
- 按平均工作时长降序排列;平均值相同时按岗位名称升序排列。
期望输出列
| 列名 | 说明 |
|---|---|
| post | 员工岗位类别 |
| work_hours | 该岗位员工的平均工作时长,单位为小时 |
数据样例
| staff_idPKBIGINT | staff_nameVARCHAR(50) | staff_genderVARCHAR(10) | postVARCHAR(50) | departmentVARCHAR(50) |
|---|---|---|---|---|
| 1 | Angus | male | Financial | dep1 |
| 2 | Cathy | female | Director | dep1 |
| 3 | Aldis | female | Director | dep2 |
| 4 | Lawson | male | Engineer | dep1 |
| 5 | Carl | male | Engineer | dep2 |
| 6 | Ben | male | Engineer | dep1 |
| 7 | Rose | female | Financial | dep2 |
输入数据显示 7 / 7 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里