【SQL 09 2022年SHEIN面试题 - 品类会员数】

本文档详述如何通过SQL查询,统计2021年12月各品类不同类型的用户数量,包括新会员、老会员复购、新会员转化等关键指标,为理解用户行为和营销策略提供数据支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

请计算每个月不同品类不同类型用户的用户数量
用户类型如下:

  • 品类新会员数: 统计月当月首次购买X品类的用户数
  • 品类老会员数: 截止到统计月之前,购买过X品类的用户数
  • 品类老会员复购数: 截止到统计月之前购买过X品类,且在统计月内再次购买X品类的用户数
  • 当期新会员转化数: 当期新会员(首次消费在统计月内的用户数)中,有多少用户购买了X品类
  • 品类历史新会员数: 截止到统计月之前,历史曾经发生过购买行为但没有购买X品类的用户数
  • 品类历史新会员转化数: 品类历史新会员中,有多少用户购买了X品类
全量销售明细表 dw_oder_detail_df:
字段名 字段类型 字段含义
pay_time varchar 付款日期(yyyy-MM-dd HH:mm:ss格式,假设一个用户同一秒中只能支付一个订单)
sku varchar 商品名称
user_id varchar 用户ID
cate_nm varchar 商品对应的品类
最终输出样式:

以2021-12月为例(实际SQL结果应包括所有月份),品类只有A,B,C三个,则数据的输出格式为:

月份 品类 品类新会员数 品类老会员数 品类老会员复购数 当期新会员转化数 品类历史新会员数 品类历史新会员转化数
2021-12 A 100 1000 300 20 20000 80
2021-12 B 100 1000 300 20 20000 80
2021-12 C 100 1000 300 20 20000 80
2021-12 A 解释:表示12月当月有100个人第一次购买X品类 解释:截止11月底,总共有1000个人买过X品类 解释:左侧1000人中,12月有300人又买了X品类 解释:首次购买在本月的用户中,有20个人在首单月购买了X品类 解释:截止到11月底,总共又2W个购买过用户没有买过A品类的用户 解释:左侧2W用户中,有80人在12月第一次买了A品类

题目分析

首先我们对于6个指标口径观察:
1.“品类新会员数” 和 “品类老会员数” 的关系就是通过——会员首次购买该品类动作发生的月份来区分。
2.“品类老会员复购数” 、 “当期新会员转化数” 、“品类历史新会员数”、“品类历史新会员转化数”的关系通过——对比会员首次购买该品类的月份和会员各月份某品类是否购买来区分的。
因此,我们核心就是查询:会员首次购买某品类月份 、 会员每个月份每个品类该品类的购买情况 以及 会员首次购买的月份。
品类新会员数 :该品类该会员的购买月份 = 该品类该会员的首次购买月份
品类老会员数 :该品类该会员的购买月份 > 该品类该会员的首次购买月份

SQL实现

一、会员首次购买某品类月份 first_month_for_cate_user & 会员首次购买月份 fisrt_month_for_user
SELECT
	
据库查询中,据倾斜往往会导致查询性能下降,尤其在处理大规模据时更为显著。窗口函SQL中处理此类问题的强大工具。首先,窗口函允许我们在聚合据的同时保持与原始据集的关联,这对于处理分组据特别有用。其次,通过合理使用窗口函,我们可以避免因据倾斜而进行不必要的全表扫描。 参考资源链接:[SQL解决常见业务挑战:流量合并与时间序列分析](https://wenku.youkuaiyun.com/doc/2qqnrrfxso?spm=1055.2569.3001.10343) 为了优化据倾斜问题,可以考虑将据按照访问频率或其他重要属性进行分区,然后再对每个分区内的据执行窗口函操作。例如,如果分析的是店铺访问据,并且存在据倾斜,可以先通过某些属性(如店铺ID)对据进行分组,然后应用窗口函来计算每个店铺的累计访问或平均消费。 窗口函的另一个用途是组合计算,即计算不同元素组合的量。在实际业务中,这可以用来分析用户行为,比如计算特定时间段内某商品的销售组合。可以使用窗口函配合CASE语句来创建条件计,从而避免对整个据集进行全量扫描。 具体来说,可以使用以下SQL语句来实现上述逻辑: ```sql SELECT 店铺ID, COUNT(*) AS 访问次, SUM(CASE WHEN 消费金额 IS NOT NULL THEN 1 ELSE 0 END) AS 有消费的访问次, AVG(消费金额) AS 平均消费金额, ROW_NUMBER() OVER(PARTITION BY 产品ID ORDER BY 销售量 DESC) AS 组合排名 FROM (SELECT 消费金额, 产品ID, 店铺ID, 销售量 FROM 销售据表) AS 消费明细 GROUP BY 店铺ID, 产品ID; ``` 在这个例子中,通过对销售据表的子查询结果使用窗口函ROW_NUMBER(),我们可以得到每个店铺针对每种产品的销售组合排名。此外,通过GROUP BY语句和AVG函,我们计算了每个店铺的平均消费金额。 为了更深入理解窗口函在解决据倾斜和组合计算中的应用,以及如何处理其他复杂业务挑战,建议详细阅读《SQL解决常见业务挑战:流量合并与时间序列分析》。这本书详细介绍了各种SQL技术在实际业务场景中的应用,提供了丰富的实例和技巧,帮助你更高效地解决业务问题。 参考资源链接:[SQL解决常见业务挑战:流量合并与时间序列分析](https://wenku.youkuaiyun.com/doc/2qqnrrfxso?spm=1055.2569.3001.10343)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eason DayDayUp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值