SQL-用户月留存率;
需求背景:
根据订单表,统计每个月在接下来几个月用户复购情况;(如:5月下单用户10000人;这10000人又在6月又下单的用户有5000人,这10000人在7月下单的用户有8000人;)
解析思路:可以建立一张 用户,月份临时表;
临时表自关联,产生笛卡尔积,使用用户id判定是否复购,用月份判定留存;
核心代码:
# 数据预处理-用户,月份去重;
drop table if exists tmp_user_retaion ;
create table tmp_user_retaion
as
select month as dt,userid
from odl_user_retain
group by month,userid;
# 留存计算;
select t1.dt as 自然月份,
t2.dt as 复购月份,
count(distinct t2.userid) as 复购用户数,
count(distinct t1.userid) as 总用户数
from tmp_user_retaion t1
left join tmp_user_retaion t2
on (t1.userid=t2.userid and t1.dt < t2.dt)
group by t1.dt,t2.dt
图表展示:
数据预处理