题解 | #统计活跃间隔对用户分级结果#
统计活跃间隔对用户分级结果
https://www.nowcoder.com/practice/6765b4a4f260455bae513a60b6eed0af
with t1 as ( select uid, date_format(in_time, '%Y-%m-%d') as in_time, date_format(max(in_time) over (), '%Y-%m-%d') as today from tb_user_log ), t2 as ( select *, datediff(today,in_time) as daysub from t1 ), t3 as ( select * , max(daysub) over (partition by uid) as maxday, min(daysub) over (partition by uid) as minday, row_number() over (partition by uid) as rn from t2 ), t5 as ( select uid, maxday, minday, case when maxday <= 6 then 1 -- 新晋 when maxday > 6 and minday <= 6 then 2 -- 忠实 when maxday > 6 and minday > 6 and minday <=29 then 3 -- 沉睡 when maxday > 6 and minday >29 then 5 -- 流失 else 0 end as usertype from t3 where rn = 1 ) select '忠实用户' as user_grade,round(count(if(usertype = 2,1,null)) / count(1),2) as ratio from t5 union select '新晋用户' as user_grade,round(count(if(usertype = 1,1,null)) / count(1),2) as ratio from t5 union select '沉睡用户' as user_grade,round(count(if(usertype = 3,1,null)) / count(1),2) as ratio from t5 union select '流失用户' as user_grade,round(count(if(usertype = 5,1,null)) / count(1),2) as ratio from t5 ;