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

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

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

with tmp1 as (
    select uid, min(date(in_time)) as first_login_date
    from tb_user_log -- 新晋用户 
    group by uid
    having first_login_date between '2021-11-04' + INTERVAL - 6 day and '2021-11-04'
),

     tmp2 as (
         select uid
         from tb_user_log -- 近七天活跃过的用户
         where date(out_time) <= '2021-11-04'
           and (date(in_time) + INTERVAL 6 day >= '2021-11-04')
         group by uid
     ),
     tmp3 as (
         select uid
         from tb_user_log -- 近三十天活跃过的用户
         where date(out_time) <= '2021-11-04'
           and (date(in_time) + INTERVAL 29 day >= '2021-11-04')
         group by uid
     ),

     tmp4 as (
         select t.uid
              , sum(count(distinct t.uid)) over () total_user
              , max(case
                        when t2.uid is not null and t1.uid is null then "忠实用户"
                        when t1.uid is not null then "新晋用户"
                        when t2.uid is null and t3.uid is not null then "沉睡用户"
                        when t.uid is not null and t3.uid is null then "流失用户"
             end)                                  user_grade-- 忠实用户
         from tb_user_log t
                  left join tmp1 t1 on t.uid = t1.uid
                  left join tmp2 t2 on t.uid = t2.uid
                  left join tmp3 t3 on t.uid = t3.uid
         group by uid)
select user_grade, round(count(user_grade) / max(total_user), 2) ratio
from tmp4
group by user_grade
order by ratio desc, user_grade

感觉好蠢都没想到最大活跃时间

全部评论

相关推荐

七牛云头号黑子:人家是过度包装被看出来没过简历,你是包都不包啊兄弟
点赞 评论 收藏
分享
今天 01:18
已编辑
南昌大学 后端工程师
白袜体育生_大中小厂...:把开源经历放个人项目上边应该更好,就像大部分人都把实习经历放个人项目上边
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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