SQL 刷题/【得物】新品系列首购到多日复购留存分析
上一题下一题困难通过率 67%

【得物】新品系列首购到多日复购留存分析

JOIN 连接聚合函数GROUP BY窗口函数CASE WHEN日期函数用户行为分析面试真题

题目描述

来源:得物 SQL 面试真题

某潮流电商平台运营团队在做新品发售后的“首购→复购”留存分析。每当一个系列上新,运营想知道:用户在该系列的首次下单日作为 Day 0 后,在第 1、3、7、14 天当天是否产生了同一系列的复购,从而评估不同系列的长尾复购能力。

数据表

t_series 潮鞋系列字典表

字段类型说明
series_idBIGINT系列 ID
series_nameVARCHAR(64)系列名称
launch_dateDATE系列首发日期(2025 年内)

t_order 订单明细表

字段类型说明
order_idBIGINT订单 ID
user_idBIGINT用户 ID
series_idBIGINT所购商品所属系列 ID,关联 t_series.series_id
pay_amountDECIMAL(10,2)实付金额
pay_timeDATETIME支付时间,已剔除未支付订单

业务定义

对每个系列,先定位该系列的全体首购用户集:每个用户在该系列最早的一笔订单对应的下单日为该用户的 Day 0。若同一用户同一时间有多笔订单,按 order_id 较小者作为首购订单。

在首购用户中,按日历日判断同一用户、同一系列在 Day 0 之后的以下日期是否产生复购:

  • D+1:Day 0 之后第 1 天。
  • D+3:Day 0 之后第 3 天。
  • D+7:Day 0 之后第 7 天。
  • D+14:Day 0 之后第 14 天。

复购是除首购订单之外的任意一笔同系列订单。日期按 DATE(pay_time) 对齐,不是 24 小时滚动窗口;跨系列订单不计入该系列复购。

问题

输出每个有首购用户的系列的首购到复购留存矩阵:

字段说明
series_id系列 ID
series_name系列名
first_buyer_cnt首购用户数
d1_rateDay+1 复购用户数 / 首购用户数,四舍五入保留 2 位小数
d3_rateDay+3 复购用户数 / 首购用户数,四舍五入保留 2 位小数
d7_rateDay+7 复购用户数 / 首购用户数,四舍五入保留 2 位小数
d14_rateDay+14 复购用户数 / 首购用户数,四舍五入保留 2 位小数

无首购用户的系列不输出。

排序规则

  1. d7_rate 降序。
  2. 若 d7_rate 相同,按 first_buyer_cnt 降序。
  3. 若仍相同,按 series_id 升序。

数据样例

当前运行环境
series_idPKBIGINTseries_nameVARCHAR(64)launch_dateDATE
1AJ1 Retro High2025-01-01
2NB 550 Classic2025-02-01
3Dunk Low Panda2025-03-01
4Forum Low White2025-04-01
5Air Max Dawn2025-05-01
输入数据显示 5 / 5
SQL 编辑器正在保存草稿...
正在加载 SQL 编辑器...

运行你的 SQL 查询后,结果将显示在这里