题解 | #统计活跃间隔对用户分级结果#
统计活跃间隔对用户分级结果
https://www.nowcoder.com/practice/6765b4a4f260455bae513a60b6eed0af
WITH TotalUIDs AS ( SELECT COUNT(DISTINCT uid) AS total_uids FROM tb_user_log ) --这里用临时表计算了用户的总数量 select distinct user_grade,round(count(uid) over(partition by user_grade)/(SELECT total_uids FROM TotalUIDs),2) as ratio from ( select t3.uid, case when last_dt_diff<7 and first_dt_diff!=last_dt_diff then '忠实用户' when last_dt_diff<7 and first_dt_diff=last_dt_diff then '新晋用户' when last_dt_diff>=7 and last_dt_diff<30 then '沉睡用户' when last_dt_diff>=30 then '流失用户' end as user_grade from ( select t1.uid, TIMESTAMPDIFF(DAY,t1.dt,'2021-11-04') as first_dt_diff,--主要是计算一个用户的最近登录和最远登录 TIMESTAMPDIFF(DAY,t2.dt,'2021-11-04') as last_dt_diff from ( select uid,min(date_format(in_time,'%Y-%m-%d')) dt from tb_user_log group by uid ) t1 left join ( select uid,max(date_format(out_time,'%Y-%m-%d')) dt from tb_user_log group by uid ) t2 on t1.uid=t2.uid ) t3 ) t4