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

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

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

select  T1.user_grade,round(count(T1.uid)/(select COUNT(distinct uid) from tb_user_log),2) ratio
from(SELECT UID,
(case when datediff((select max((in_time)) from tb_user_log),min(in_time))<=6 then '新晋用户'
when datediff((select max((in_time)) from tb_user_log),MAX((in_time)))<=6 then '忠实用户'
when datediff((select max((in_time)) from tb_user_log),MAX((in_time)))<=29 then '沉睡用户'
else '流失用户'
end) AS user_grade
from tb_user_log
group by uid) T1
GROUP BY user_grade
order by ratio desc

用了一个极其消耗时间得代码,这个代码唯一优点可能就是思路清晰。

从题目中我们中知道要进行分级,首先将用户分级。其实,新晋用户得含义就是它最小得登录时间是七天内,沉睡用户我理解得也是题目没写全,应该是近7天未活跃,但是30天有活跃。所以这里用case when函数是最适合得,先判断是不是新晋用户,再看是不是忠实用户,接着是沉睡用户,除了这些用户就是流失客户。给所有用户分完级之后就可以计算比例了。当然我的方法其实不太好,用了太多子查询了。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务