【美团】生成近 7 天骑手履约时效城市排名
JOIN 连接聚合函数窗口函数CASE WHEN日期函数用户行为分析面试真题
题目描述
来源:美团 SQL 面试真题
出行平台需要生成“近 7 天骑手履约时效看板”,按城市评估每位骑手的近 7 天送达单量、准时单量、准时率和平均配送时长,并在城市内排名。
数据表
courier 骑手信息表
| 字段 | 类型 | 说明 |
|---|---|---|
| courier_id | INT | 骑手编号,主键 |
| courier_name | VARCHAR(64) | 骑手姓名 |
| city | VARCHAR(32) | 所在城市 |
| hired_at | DATE | 入职日期 |
parcel 包裹履约表
| 字段 | 类型 | 说明 |
|---|---|---|
| parcel_id | BIGINT | 包裹编号,主键 |
| courier_id | INT | 骑手编号 |
| shipped_ts | DATETIME | 骑手取件时间 |
| delivered_ts | DATETIME | 实际送达时间,仅统计已送达记录 |
| promised_minutes | INT | 承诺时效,单位为分钟 |
题目要求
以 parcel 表中最新一条已送达记录的 delivered_ts 的日期作为基准日,统计基准日前 6 天至基准日共 7 个自然日内的履约情况。
对每位骑手计算:
orders_7d:近 7 天送达单量。on_time_7d:送达时长小于等于承诺时效的准时单量。on_time_rate:on_time_7d / orders_7d,四舍五入保留 2 位小数。avg_minutes_7d:平均配送时长,使用TIMESTAMPDIFF(MINUTE, shipped_ts, delivered_ts)计算并四舍五入保留 2 位小数。rank_in_city:在城市内按准时率降序、平均配送分钟数升序计算的RANK。
只输出近 7 天有送达单的骑手。结果按 city、rank_in_city、courier_id 升序排列。
数据样例
| courier_idPKINT | courier_nameVARCHAR(64) | cityVARCHAR(32) | hired_atDATE |
|---|---|---|---|
| 1 | Alice | Shanghai | 2023-01-10 |
| 2 | Bob | Shanghai | 2023-03-15 |
| 3 | Carol | Shanghai | 2024-02-01 |
| 4 | David | Beijing | 2022-11-20 |
| 5 | Eve | Beijing | 2024-04-05 |
| 6 | Frank | Beijing | 2025-01-01 |
输入数据显示 6 / 6 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里