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
分析题目后可得:
# 新晋用户:全表最大时间(今天)-注册时间<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
全部评论
相关推荐