关于排序的疑问 | #统计活跃间隔对用户分级结果#
统计活跃间隔对用户分级结果
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##悬赏#
查看30道真题和解析
小天才公司福利 1159人发布