-
用户等级标准简化为:忠实用户(近7天活跃过且非新晋用户)、新晋用户(近7天新增)、沉睡用户(近7天未活跃但更早前活跃过)、流失用户(近30天未活跃但更早前活跃过)。
-
假设今天就是数据中所有日期的最大值。
-
近7天表示包含当天T的近7天,即闭区间[T-6, T]。
-
近7天 (datediff<=6 )
- 近30天(datediff<=29)
-
假设今天就是数据中所有日期的最大值。
-
求出今天的日期 now----select max(date(out_time) )from tb_user_log as now
-
求出每个客户第一次登录的时间(firsttime)----min(date(in_time) )以及最新登录的时间(newtime)----max(date(out_time) )
-
易错点
-
用户等级划分:
-
近7天表示包含当天T的近7天,即闭区间[T-6, T]。
-
近7天 (datediff<=6 )
-
近30天(datediff<=29)
-
select 后面查询规则:select 后面语句只能是一列一列的,不能是多行多列
-
等级区分,使用case when 函数
运行代码:
select user_grade, round(count(uid)/ (select count(distinct uid) from tb_user_log) ,2) ratio
from
(
select uid, (case when datediff(now,newtime)<=6 and datediff(now,firsttime)>6
then'忠实用户'
when datediff(now,firsttime)<=6 then '新晋用户'
when datediff(now,newtime)>29 and datediff(now,firsttime)>29 then '流失用户'
else '沉睡用户'
end ) user_grade
from
(
select uid, max(date(out_time)) newtime, #最近登录时间
min(date(in_time)) firsttime, #第一次登录时间
(select max(date(out_time)) nowtime from tb_user_log ) now, #今天的日期
(select count(distinct uid) from tb_user_log ) couid #总的用户数
from tb_user_log
group by uid
) as A) as B
group by user_grade
order by ratio desc
-
近7天表示包含当天T的近7天,即闭区间[T-6, T]。
-
近7天 (datediff<=6 )
- 近30天(datediff<=29)
from
(
select uid, (case when datediff(now,newtime)<=6 and datediff(now,firsttime)>6
then'忠实用户'
when datediff(now,firsttime)<=6 then '新晋用户'
when datediff(now,newtime)>29 and datediff(now,firsttime)>29 then '流失用户'
else '沉睡用户'
end ) user_grade
from
(
select uid, max(date(out_time)) newtime, #最近登录时间
min(date(in_time)) firsttime, #第一次登录时间
(select max(date(out_time)) nowtime from tb_user_log ) now, #今天的日期
(select count(distinct uid) from tb_user_log ) couid #总的用户数
from tb_user_log
group by uid
) as A) as B
group by user_grade
order by ratio desc