题解 | 统计活跃间隔对用户分级结果

统计活跃间隔对用户分级结果

https://www.nowcoder.com/practice/6765b4a4f260455bae513a60b6eed0af

WITH 
    -- 合并活跃日期计算和边界计算
    user_activity_data AS (
        SELECT 
            uid,
            DATE(in_time) AS active_date
        FROM tb_user_log
        UNION
        SELECT 
            uid,
            DATE(out_time) AS active_date
        FROM tb_user_log
    ),
    
    -- 计算日期边界和用户活跃情况
    user_stats AS (
        SELECT 
            uid,
            MIN(active_date) AS first_active_date,
            MAX(active_date) AS last_active_date,
            (SELECT MAX(active_date) FROM user_activity_data) AS today,
            (SELECT DATE_SUB(MAX(active_date), INTERVAL 6 DAY) FROM user_activity_data) AS seven_days_ago,
            (SELECT DATE_SUB(MAX(active_date), INTERVAL 29 DAY) FROM user_activity_data) AS thirty_days_ago
        FROM user_activity_data
        GROUP BY uid
    ),
    
    -- 直接分类用户
    user_classification AS (
        SELECT
            uid,
            CASE
                WHEN first_active_date >= seven_days_ago THEN '新晋用户'
                WHEN last_active_date >= seven_days_ago THEN '忠实用户'
                WHEN last_active_date >= thirty_days_ago THEN '沉睡用户'
                ELSE '流失用户'
            END AS user_grade
        FROM user_stats
    )

-- 计算各类用户占比
SELECT
    user_grade,
    ROUND(COUNT(*) / (SELECT COUNT(*) FROM user_classification), 2) AS ratio
FROM user_classification
GROUP BY user_grade
ORDER BY ratio DESC, user_grade;

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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