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

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

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##悬赏#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-21 13:38
8月实习会变多吗现在还没找到实习该怎么办...回复的hr好少
码农索隆:3-4月就要开始找,基本上6月份就发offer,7月初已经开始暑期实习了。
点赞 评论 收藏
分享
想按时下班的大菠萝在...:隔壁学校的,加油多投, 实在不好找可以下个学期开学找,把算法八股准备好,项目有空再换换
投了多少份简历才上岸
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 17:55
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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