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
全部评论

相关推荐

04-15 23:42
中山大学 Java
ResourceUtilization:过几天楼主就会捧着一堆offer来问牛友们该怎么选辣
点赞 评论 收藏
分享
找到实习就改名4月17日下午更改:1600一个月?
点赞 评论 收藏
分享
bg&nbsp;为&nbsp;985&nbsp;本应届生,方向是嵌入式软件。纠结了很久,两边都不太了解,恳请各位大佬帮选,非常感谢🙏。
ResourceUtilization:求稳海能达,趁着年轻赚它一笔就relink吧,有个疑惑,怎么睿连同岗位多这么多base原因吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务