关于排序的疑问 | #统计活跃间隔对用户分级结果#
统计活跃间隔对用户分级结果
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##悬赏#