【携程】计算订单奖励后的会员积分
WHERE 条件JOIN 连接聚合函数GROUP BY子查询ORDER BY用户行为分析面试真题
题目描述
来源:携程 SQL 面试真题
某公司需要根据最近几日的订单数据,计算会员获得订单奖励后的最新积分。
数据表
order_tb 订单信息表
| 字段 | 类型 | 说明 |
|---|---|---|
| order_id | BIGINT | 订单 ID |
| user_id | BIGINT | 用户 ID |
| order_price | DECIMAL | 订单金额 |
| order_time | DATETIME | 订单创建时间 |
uservip_tb 会员等级信息表
| 字段 | 类型 | 说明 |
|---|---|---|
| user_id | BIGINT | 用户 ID |
| vip | VARCHAR | 会员等级 |
| point | INT | 更新前的会员积分 |
积分规则
- 订单金额严格大于 100 时,用户获得与订单金额相同数额的积分。
- 订单金额小于或等于 100 时,不获得积分。
- 同一用户有多笔符合条件的订单时,奖励积分需要累加。
- 只输出至少获得过一次奖励积分的用户。
题目要求
- 计算并输出用户 ID 和更新后的积分。
- 更新后积分 = 当前积分 + 符合条件订单的金额总和。
- 按更新后积分降序排列;积分相同时按 user_id 升序排列。
期望输出列
| 列名 | 说明 |
|---|---|
| user_id | 获得订单奖励的用户 ID |
| point | 订单奖励后的最新积分 |
数据样例
| order_idPKBIGINT | user_idBIGINT | order_priceDECIMAL(12, 2) | order_timeDATETIME |
|---|---|---|---|
| 101 | 11 | 380 | 2022-09-01 09:00:00 |
| 102 | 12 | 200 | 2022-09-01 10:00:00 |
| 103 | 13 | 260 | 2022-09-01 12:00:00 |
| 104 | 11 | 100 | 2022-09-02 11:00:00 |
| 105 | 12 | 150 | 2022-09-02 12:00:00 |
| 106 | 12 | 1200 | 2022-09-02 13:00:00 |
| 107 | 11 | 60 | 2022-09-03 09:00:00 |
| 108 | 13 | 380 | 2022-09-03 09:30:00 |
输入数据显示 8 / 8 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里