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

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

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

# 给每个用户分级
# 计算每类用户占比
# 忠实用户:[T-6, T] 至少活跃1次,且曾经也活跃过一次
# 新晋用户:[T-6, T] 至少活跃一次, 且曾经没有活跃过
# 沉睡用户:[T-6, T] 未活跃,但之前至少活跃一次
# 流失用户:[T-29, T] 未活跃,但曾经活跃过

# 只需要计算用户的最早活跃时间和最近活跃时间
select
    t3.user_grade
    , round(count(*) / (select count(distinct uid) from tb_user_log), 2) as ratio
from(
    select
        t2.uid
        , (
        case when datediff(today, latest) <= 6 and datediff(today, earliest) > 6 then "忠实用户"
            when datediff(today, earliest) <= 6 then "新晋用户"
            when datediff(today, latest) > 29 and datediff(today, earliest) > 29 then "流失用户"
            when datediff(today, latest) > 6 and datediff(today, earliest) > 6 then "沉睡用户"
            end
        ) as user_grade
    from(
        select
            t1.uid
            , min(t1.dt) as earliest
            , max(t1.dt) as latest
            , (select max(date(out_time)) from tb_user_log) as today
        from(
            select 
                ug.uid
                , date(ug.in_time) as dt
            from tb_user_log as ug
            union all
            select
                ug.uid
                , date(ug.out_time) as dt
            from tb_user_log as ug
            ) as t1
        group by t1.uid
        ) as t2
    ) as t3
group by t3.user_grade
order by ratio desc

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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