SQL 刷题/【阿里巴巴】使用递归 CTE 统计会员推荐网络积分
上一题下一题困难通过率 0%

【阿里巴巴】使用递归 CTE 统计会员推荐网络积分

JOIN 连接路径分析面试真题

题目描述

来源:阿里 SQL 面试真题

某大型连锁健身房在 2025 年上半年推出“老带新”裂变营销活动。现有会员可以推荐新会员入会,新会员入会后也可以继续推荐其他人。直接推荐人可以获得基础奖励积分,间接推荐人的积分会随着推荐层级加深而衰减。

店长希望追溯名为“张三”的活跃会员在活动期间建立的完整推荐网络,并核算其网络中每个节点的实际贡献积分。

数据表

members 会员表

字段类型说明
member_idINT会员编号,主键
member_nameVARCHAR(64)会员姓名
membership_typeVARCHAR(32)会员卡类型

referral_records 推荐记录表

字段类型说明
referrer_idINT推荐人编号
referee_idINT被推荐人编号
join_dateDATE新会员正式签约入会日期
base_reward_pointsFLOAT本次推荐产生的基础奖励积分

业务规则

  1. 只统计 join_date 在 2025-01-01 至 2025-06-30 之间的推荐关系,包含首尾两日。
  2. 递归网络中的每一条推荐关系都必须处于这个时间范围内;如果某条下游推荐关系超出范围,则该关系及其下游分支都不进入结果。
  3. 由“张三”直接推荐的会员层级为 1,继续向下每递归一层,层级加 1。
  4. 实际贡献积分 = base_reward_points × 0.5^(推荐层级 - 1)。
  5. actual_points 四舍五入保留 2 位小数。

输出要求

查询由“张三”直接或间接推荐入会的所有下线会员,输出:

字段说明
referee_id被推荐人编号
referee_name被推荐人姓名
referral_level推荐层级,直接推荐为 1
actual_points实际贡献积分,四舍五入保留 2 位

排序规则:

  1. referral_level 升序。
  2. actual_points 降序。
  3. referee_id 升序。

数据样例

当前运行环境
member_idPKINTmember_nameVARCHAR(64)membership_typeVARCHAR(32)
1张三年卡
2李四私教包月卡
3王五年卡
4赵六季卡
5孙七年卡
6周八私教包月卡
7吴九季卡
8郑十年卡
输入数据显示 8 / 10
SQL 编辑器正在保存草稿...
正在加载 SQL 编辑器...

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