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

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

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

WITH today AS(
    SELECT MAX(DATE(in_time)) FROM tb_user_log
)

SELECT
    user_grade,
    ROUND(COUNT(uid) / (SELECT COUNT(DISTINCT uid) FROM tb_user_log), 2) AS ratio
FROM 
(
    SELECT
        DISTINCT t1.uid,
        CASE
            WHEN DATEDIFF((SELECT * FROM today), min_time) <= 6 THEN '新晋用户'
            WHEN DATEDIFF((SELECT * FROM today), min_time) > 6 AND DATEDIFF((SELECT * FROM today), max_time) <= 6 THEN '忠实用户' 
            WHEN DATEDIFF((SELECT * FROM today), max_time) > 6 AND DATEDIFF((SELECT * FROM today), max_time) <= 29 THEN '沉睡用户' 
            WHEN DATEDIFF((SELECT * FROM today), max_time) > 29 THEN '流失用户'
            END AS user_grade
        FROM (
            SELECT
                uid,
                DATE(MIN(in_time)) AS min_time,
                DATE(MAX(in_time)) AS max_time
            FROM tb_user_log
            GROUP BY uid
        ) t1
        JOIN tb_user_log t2 ON t1.uid = t2.uid 
)t2
GROUP BY user_grade
ORDER BY ratio DESC

一定要利用好子查询“准备好”要使用的字段,除此之外DISTINCT不能忘了。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 14:23
steelhead:你回的有问题,让人感觉你就是来学习的
点赞 评论 收藏
分享
陈逸轩1205:才105 哥们在养生呢
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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