题解 | SaaS产品高价值用户活跃度分析

SaaS产品高价值用户活跃度分析

https://www.nowcoder.com/practice/439f6de3254143e7b3673ed0259d98b0

WITH tb1 AS (
    SELECT user_id
    FROM user_events
    WHERE user_id IN (
        SELECT user_id
        FROM users
        WHERE plan_type = 'Pro'
        AND registration_date BETWEEN '2025-01-01' AND '2025-06-30'
    ) 
    AND event_type = 'login'
    AND event_timestamp >= '2025-01-01' AND event_timestamp < '2025-04-01'
),
tb2 AS (
    SELECT user_id, 
    CASE WHEN event_type = 'create_task' THEN 5
         WHEN event_type = 'export_report' THEN 10
         WHEN event_type = 'invite_member' THEN 8
         ELSE 1 END AS activity_score,
    IF(event_timestamp >= '2025-01-01' AND event_timestamp < '2025-04-01', 1, 0) AS is_q1_event
    FROM user_events 
    WHERE user_id IN (SELECT user_id FROM tb1)
)
SELECT  CONCAT(users.user_name, '(', tb2.user_id, ')' )  AS user_profile, 
        SUM(activity_score) AS total_activity_score,
        ROUND(SUM(tb2.is_q1_event) / 3, 2) AS avg_monthly_events
FROM tb2
LEFT JOIN users USING (user_id)
GROUP BY user_name, user_id
ORDER BY total_activity_score DESC, avg_monthly_events DESC, user_id ASC

第一步:精准画像筛选(准入逻辑 tb1

这一步是为了找出“谁才是我们要统计的人”。

  • 注册维度:必须是 2025 年上半年(1月-6月)注册的 'Pro' 计划用户。
  • 行为维度:必须在 2025 年第一季度(Q1)内至少有过一次 'login' 行为。
  • 关键点:你使用了 event_timestamp < '2025-04-01',确保了 3 月 31 日晚上的登录行为不会被漏掉,解决了之前 Grace(202) “失踪”的问题。

第二步:多维度指标预处理(打分逻辑 tb2

由于积分和月均事件数的统计时间范围不同,你在这里做了一个非常巧妙的宽表预处理

  • 全量积分:不对 event_timestamp 做总过滤,确保 Alice 四月份的 invite_member(8分)能够计入 total_activity_score。
  • 标签化处理:通过 IF 函数创建了 is_q1_event 辅助列。如果是 Q1 的事件记为 1,否则为 0。这为你后续在同一行 SQL 里计算不同时间跨度的指标打下了基础。

第三步:结果聚合与格式化(呈现逻辑)

最后通过 LEFT JOINusers 表获取用户名,并进行最终计算:

  • 指标 1:user_profile:使用 CONCAT 函数将用户名和 ID 拼接,满足了特定的输出格式。
  • 指标 2:total_activity_score:对 tb2 全量数据求和。
  • 指标 3:avg_monthly_events:仅对 is_q1_event 标记为 1 的记录求和(即 Q1 总次数)再除以 3。
  • 多级排序:严格执行了“积分降序 > 月均降序 > ID 升序”的三重规则。
全部评论

相关推荐

点赞 评论 收藏
分享
axiom15:校友,我感觉你这个简历去华子暑期实习随便去了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务