关于排序的疑问 | #统计活跃间隔对用户分级结果#

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

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

WITH t3 AS(
#t3是根据时间差做用户分级
    WITH t2 AS(
	#t2是为了取今天的日期,以及各用户的最早/最晚活跃日期
        WITH t1 AS(
		#t1这层是考虑登入登出时间跨天的问题,但是题目没说的话好像没必要。
            SELECT
                uid,
                DATE(in_time) dt
            FROM tb_user_log
            UNION
            SELECT
                uid,
                DATE(out_time) dt
            FROM tb_user_log
        ) 
    SELECT
        DISTINCT uid,
        (SELECT MAX(DATE(dt)) FROM t1) today,
        MAX(dt) OVER(PARTITION BY uid) max_dt,
        MIN(dt) OVER(PARTITION BY uid) min_dt
    FROM t1
    )
SELECT
    uid,
        CASE
        WHEN DATEDIFF(today,max_dt)<=6 AND DATEDIFF(today, min_dt) >6  THEN "忠实用户"
        WHEN DATEDIFF(today,max_dt)<=6 AND DATEDIFF(today,min_dt) <=6  THEN "新晋用户"
        WHEN DATEDIFF(today,max_dt) BETWEEN 7 AND 29  THEN "沉睡用户"
        ELSE "流失用户"
    END AS user_grade
FROM t2
)
SELECT
    user_grade,
    ROUND(COUNT(uid)/ (SELECT COUNT(*) FROM t3),2) ratio #算各等级用户占比
FROM t3
GROUP BY user_grade
ORDER BY ratio DESC,user_grade

以上是我写的代码,结果是正确的,但是 ORDER BY ratio DESC,user_grade 这行,

如果我不加上user_grade的排序,结果里的沉睡用户和流失用户的顺序就是错误的,为什么呢?求各位大佬帮忙解惑!

#牛客帮帮团来啦!有问必答##sql练习日常##sql##悬赏#
全部评论

相关推荐

雨夜迈巴赫:哪个厂呀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务