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

SQL165 统计活跃间隔对用户分级结果
分析题目后可得:
# 新晋用户:全表最大时间(今天)-注册时间<7
# 沉睡用户:全表最大时间(今天)-最近登录>=7 and 全表最大时间(今天)-最近登录<=29
# 流失用户:全表最大时间(今天)-最近登录>=30
# 忠实用户:全表最大时间(今天)-最近登录<7 and 全表最大时间(今天)-注册时间>=7

故首先要找出每个用户的注册时间、最近登录时间、全表最大时间(作为今天),然后根据题意对每个用户进行分级,最后分组求出每个级别的人数并除以总用户数(select count(distinct uid) from tb_user_log),即可得出每个级别的占比情况

with t1 as(
select
    uid
    ,(select max(date(in_time)) from tb_user_log) as max_intime # 全表最大时间(今天)
    ,max(date(in_time)) as max_in_time # 每个用户登录的最大时间(最近登录)
    ,min(date(in_time)) as min_in_time # 每个用户登录的最小时间(注册时间)
from
    tb_user_log
group by 
    uid
),t2 as(
select
    uid,
    case
    when datediff(max_intime,min_in_time)<7  then '新晋用户'
when datediff(max_intime,max_in_time)>=7 and datediff(max_intime,max_in_time)<=29 then '沉睡用户'
when datediff(max_intime,max_in_time)>=30 then '流失用户'
    else '忠实用户'end user_grade 
from
    t1
group by
    uid
)

select
    user_grade
    ,round(count(uid)/(select count(distinct uid) from tb_user_log),2) ratio
from
    t2
group by
    user_grade
order by
    ratio desc
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务