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

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

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

WITH uid_dt as (
SELECT distinct uid, DATE(in_time) as dt FROM tb_user_log
UNION 
SELECT distinct uid, DATE(out_time) as dt FROM tb_user_log
)



select user_grade,round(cnt/s,2) as ratio
from
(
select user_grade, count(user_grade) as cnt,(select count(distinct(uid)) from uid_dt) as s
from(

select uid,dt_first,
        (case 
         when dt_first>=
        (select date_sub(dt_now,INTERVAL 6 day) as dt_7_day
        from(select max(dt) as dt_now from uid_dt)l)
        then '新晋用户' 
         when dt_last >=
         (select date_sub(dt_now,INTERVAL 6 day) as dt_7_day
        from(select max(dt) as dt_now from uid_dt)l)
         and 
         dt_first < 
         (select date_sub(dt_now,INTERVAL 6 day) as dt_7_day
        from(select max(dt) as dt_now from uid_dt)l)
         then '忠实用户'
         when dt_last < 
         (select date_sub(dt_now,INTERVAL 6 day) as dt_7_day
        from(select max(dt) as dt_now from uid_dt)l)
         and dt_last >= 
         (select date_sub(dt_now,INTERVAL 29 day) as dt_30_day
        from(select max(dt) as dt_now from uid_dt)l)
         
        then '沉睡用户'
         when dt_last < 
         (select date_sub(dt_now,INTERVAL 29 day) as dt_30_day
        from(select max(dt) as dt_now from uid_dt)l)
        then '流失用户'
        else 0 end) as user_grade 
        
from(select uid,min(dt) as dt_first ,max(dt) as dt_last from uid_dt group by uid)ll
)lll
group by user_grade

)llll
order by ratio desc







全部评论

相关推荐

屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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