题解 | 统计活跃间隔对用户分级结果 简单易懂!

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

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

# 新晋用户:从当天开始近7天新增用户 DATEDIFF('当天', '用户最早登录时间') <= 6
# 忠实用户:从当天开始近7天活跃用户但非新晋用户 直接ELSE就完事儿了
# 沉睡用户:从当天开始7天到30天内活跃过的用户 DATEDIFF('当天', '用户最晚登出时间') BETWEEN 7 AND 29
# 流失用户:从当天开始30天之前活跃过的用户 DATEDIFF('当天', '用户最晚登出时间') > 29

SELECT
    user_grade,
    ROUND(COUNT(user_grade) / (SELECT COUNT(DISTINCT uid) FROM tb_user_log), 2) AS ratio # 计算ratio
FROM(
SELECT # 第二步 使用 CASE WHEN 进行用户分类
    uid,
CASE
    WHEN DATEDIFF((SELECT MAX(DATE(out_time)) FROM tb_user_log), reg_dt) <= 6 THEN '新晋用户'
    WHEN DATEDIFF((SELECT MAX(DATE(out_time)) FROM tb_user_log), recent_dt) BETWEEN 7 AND 29 THEN '沉睡用户'
    WHEN DATEDIFF((SELECT MAX(DATE(out_time)) FROM tb_user_log), recent_dt) > 29 THEN '流失用户'
    ELSE '忠实用户'
END AS user_grade
FROM(
    SELECT # 第一步先创建最早登录,最晚登出时间表
        uid,
        MIN(DATE(in_time)) AS reg_dt, # 用户最早登录时间
        MAX(DATE(out_time)) AS recent_dt # 用户最晚登出时间
    FROM tb_user_log
    GROUP BY uid 
) AS tb1
) AS tb2
GROUP BY user_grade
ORDER BY ratio DESC

全部评论

相关推荐

12-19 16:52
门头沟学院
点赞 评论 收藏
分享
牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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