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

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

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


#总体思路:给每个日期加上标签
  1. 怎么就不会转换一下思维呢?只要把比较的日期变成两个日期减出来的数字就好了啊!
  2. 在时间函数里不能直接出现select语句,但是可以用date函数把select语句包起来
  3. DATE((SELECT MAX(in_time) FROM tb_user_log))不可以单独成表然后引用,因为命令最后的group函数是作用到两个表格里的,如果计算时间的表格没有uid就会报错


select user_grade,
round(count(*)/(select count(distinct uid) from tb_user_log),2) ratio
from (
select uid,
(case when timestampdiff(day,max(date(in_time)),DATE((SELECT MAX(in_time) FROM tb_user_log)))<=6
and timestampdiff(day,min(date(in_time)),DATE((SELECT MAX(in_time) FROM tb_user_log)))>6 then '忠实用户'
when timestampdiff(day,max(date(in_time)),DATE((SELECT MAX(in_time) FROM tb_user_log))) between 6 and 29 then '沉睡用户'
when timestampdiff(day,max(date(in_time)),DATE((SELECT MAX(in_time) FROM tb_user_log)))>29 then '流失用户'
when timestampdiff(day,min(date(in_time)),DATE((SELECT MAX(in_time) FROM tb_user_log)))<6 then '新晋用户'
 end) user_grade
from tb_user_log
group by uid
)t
group by user_grade
order by ratio desc

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务