题解 | #统计活跃间隔对用户分级结果#

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

https://www.nowcoder.com/practice/6765b4a4f260455bae513a60b6eed0af

select user_grade,round(count(1)/(select count(distinct uid) from tb_user_log),2) as ratio
from(
select uid,(case when timestampdiff(day,in_time,cur_dt) < 7 then '新晋用户'
    when timestampdiff(day,in_time,cur_dt) >= 7 and timestampdiff(day,out_time,cur_dt) < 7 then '忠实用户'
    when timestampdiff(day,out_time,cur_dt) >= 7 and timestampdiff(day,out_time,cur_dt) < 30 then '沉睡用户'
    when timestampdiff(day,out_time,cur_dt) >= 30 then '流失用户' end) as user_grade
from(
select uid,min(in_time) as in_time,max(out_time) as out_time from tb_user_log
group by uid) as t1
left join (select max(out_time) as cur_dt from tb_user_log) as t2
on 1) as tt
group by user_grade
order by ratio desc

case whend的用法,提取当前日期cur_dt,最早登陆时间用来判断新晋用户,最晚登陆时间用来判断活跃天数,最后分组聚合求和即可

全部评论

相关推荐

牛客nb666号:看数据范围, -1e4~1e4, 用一个计数数组存一下, 再按个数让k减到0就行; 堆排不是O(n)的, 快速选择算法是O(n)但随机性较强
点赞 评论 收藏
分享
爱睡觉的冰箱哥:你是我今晚见过的最美的牛客女孩
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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