前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >MySql场景面试题:电商业务中用户的行为路径和转化率分析

MySql场景面试题:电商业务中用户的行为路径和转化率分析

作者头像
公众号:码到三十五
发布2025-02-23 08:36:30
发布2025-02-23 08:36:30
8610
代码可运行
举报
文章被收录于专栏:设计模式设计模式
运行总次数:0
代码可运行

电商业务,一个订单表 orders 和一个用户表 users。现需要分析用户的行为路径转化率

表结构:

  1. 用户表 (users):
    • user_id (用户ID, 主键)
    • register_date (注册日期)
    • city (所在城市)
  2. 订单表 (orders):
    • order_id (订单ID, 主键)
    • user_id (用户ID, 外键)
    • order_date (订单日期)
    • amount (订单金额)

具体需求如下:

  1. 用户行为路径分析
    • 统计用户在2023年内的行为路径,包括:
      • 首次购买日期。
      • 第二次购买日期(如果有)。
      • 最后一次购买日期。
      • 购买次数。
      • 累计购买金额。
    • 按城市分组,统计每个城市的用户行为路径。
  2. 转化率分析
    • 计算以下转化率:
      • 注册到首次购买转化率:注册用户中在2023年内完成首次购买的用户占比。
      • 首次购买到第二次购买转化率:首次购买用户中完成第二次购买的用户占比。
      • 复购用户到高价值用户转化率:复购用户中累计购买金额 ≥ 10,000 元的用户占比。
  3. 用户留存分析
    • 计算用户在首次购买后的第30天、60天、90天的留存率。
    • 按城市分组,统计每个城市的用户留存率。
参考SQL
代码语言:javascript
代码运行次数:0
复制
WITH user_orders_2023 AS (
    -- 获取2023年内的订单数据,并标记首次、第二次、最后一次购买日期
    SELECT
        u.user_id,
        u.city,
        u.register_date,
        o.order_date,
        o.amount,
        MIN(o.order_date) OVER (PARTITION BY o.user_id) AS first_order_date,
        LEAD(o.order_date, 1) OVER (PARTITION BY o.user_id ORDER BY o.order_date) AS second_order_date,
        MAX(o.order_date) OVER (PARTITION BY o.user_id) AS last_order_date,
        COUNT(o.order_id) OVER (PARTITION BY o.user_id) AS order_count,
        SUM(o.amount) OVER (PARTITION BY o.user_id) AS total_amount
    FROM
        users u
    JOIN
        orders o ON u.user_id = o.user_id
    WHERE
        o.order_date BETWEEN '2023-01-01' AND '2023-12-31'
),
user_behavior_path AS (
    -- 统计用户行为路径
    SELECT
        user_id,
        city,
        first_order_date,
        second_order_date,
        last_order_date,
        order_count,
        total_amount
    FROM
        user_orders_2023
    GROUP BY
        user_id, city, first_order_date, second_order_date, last_order_date, order_count, total_amount
),
conversion_analysis AS (
    -- 计算转化率
    SELECT
        city,
        COUNT(DISTINCT CASE WHEN first_order_date IS NOT NULL THEN user_id END) * 1.0 / COUNT(DISTINCT user_id) AS registration_to_first_purchase,
        COUNT(DISTINCT CASE WHEN second_order_date IS NOT NULL THEN user_id END) * 1.0 / COUNT(DISTINCT CASE WHEN first_order_date IS NOT NULL THEN user_id END) AS first_to_second_purchase,
        COUNT(DISTINCT CASE WHEN total_amount >= 10000 THEN user_id END) * 1.0 / COUNT(DISTINCT CASE WHEN order_count >= 2 THEN user_id END) AS repurchase_to_high_value
    FROM
        user_orders_2023
    GROUP BY
        city
),
retention_analysis AS (
    -- 计算用户留存率
    SELECT
        city,
        COUNT(DISTINCT CASE WHEN DATEDIFF(order_date, first_order_date) >= 30 THEN user_id END) * 1.0 / COUNT(DISTINCT user_id) AS retention_30d,
        COUNT(DISTINCT CASE WHEN DATEDIFF(order_date, first_order_date) >= 60 THEN user_id END) * 1.0 / COUNT(DISTINCT user_id) AS retention_60d,
        COUNT(DISTINCT CASE WHEN DATEDIFF(order_date, first_order_date) >= 90 THEN user_id END) * 1.0 / COUNT(DISTINCT user_id) AS retention_90d
    FROM
        user_orders_2023
    GROUP BY
        city
)
-- 综合输出:按城市输出用户行为路径、转化率和留存率
SELECT
    ubp.city,
    AVG(DATEDIFF(second_order_date, first_order_date)) AS avg_days_first_to_second,
    AVG(DATEDIFF(last_order_date, first_order_date)) AS avg_days_first_to_last,
    AVG(order_count) AS avg_order_count,
    AVG(total_amount) AS avg_total_amount,
    ca.registration_to_first_purchase,
    ca.first_to_second_purchase,
    ca.repurchase_to_high_value,
    ra.retention_30d,
    ra.retention_60d,
    ra.retention_90d
FROM
    user_behavior_path ubp
JOIN
    conversion_analysis ca ON ubp.city = ca.city
JOIN
    retention_analysis ra ON ubp.city = ra.city
GROUP BY
    ubp.city,
    ca.registration_to_first_purchase,
    ca.first_to_second_purchase,
    ca.repurchase_to_high_value,
    ra.retention_30d,
    ra.retention_60d,
    ra.retention_90d;

查询逻辑分解
  1. user_orders_2023:
    • 获取2023年内的订单数据,并使用窗口函数标记每个用户的首次、第二次和最后一次购买日期,以及购买次数和累计金额。
  2. user_behavior_path:
    • 统计每个用户的行为路径,包括首次购买日期、第二次购买日期、最后一次购买日期、购买次数和累计金额。
  3. conversion_analysis:
    • 计算以下转化率:
      • 注册到首次购买转化率。
      • 首次购买到第二次购买转化率。
      • 复购用户到高价值用户转化率。
  4. retention_analysis:
    • 计算用户在首次购买后的第30天、60天、90天的留存率。
  5. 综合输出:
    • 将用户行为路径、转化率和留存率结合,按城市输出最终结果。
示例输出

city

avg_days_first_to_second

avg_days_first_to_last

avg_order_count

avg_total_amount

registration_to_first_purchase

first_to_second_purchase

repurchase_to_high_value

retention_30d

retention_60d

retention_90d

北京

45.67

180.50

4.2

8500

0.80

0.60

0.25

0.50

0.40

0.30

上海

50.00

200.00

3.8

7800

0.75

0.55

0.20

0.45

0.35

0.25

考察点

  1. 行为路径分析:使用窗口函数(如 MINLEADMAX)标记用户的关键行为节点。
  2. 转化率计算:通过条件聚合计算多级转化率。
  3. 留存率计算:使用 DATEDIFF 和条件聚合计算用户留存率。
  4. 多步骤数据处理:通过 WITH 子句分步骤处理数据,提升可读性和性能。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考SQL
  • 查询逻辑分解
  • 示例输出
  • 考察点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档