sql练习:计算次日留存率

现有用户登录记录表,已经按照用户日期进行去重处理。以用户登录的最早日期作为新增日期,请计算次日留存率是多少。

create table t7_login
(
user_id string COMMENT '用户ID',
login_date string COMMENT '登录日期'
) COMMENT '用户登录记录表';
 
insert into t7_login(user_id,login_date)
values
('aaa','2023-12-01'),
('bbb','2023-12-01'),
('bbb','2023-12-02'),
('ccc','2023-12-02'),
('bbb','2023-12-03'),
('ccc','2023-12-03'),
('ddd','2023-12-03'),
('ccc','2023-12-04'),
('ddd','2023-12-04');

指标定义:

次日留存用户:新增用户第二天登录(活跃)的用户;

次日留存率:t+1日留存用户数/t日新增用户;

1.根据登录日志,使用窗口函数计算出用户的最小登录时间作为新增日期first_day,然后计算登录日期和新增日期的时间差。

select user_id,
       login_date,
       min(login_date) over (partition by user_id order by login_date asc)                       as first_day,
       datediff(login_date, min(login_date) over (partition by user_id order by login_date asc)) as date_diff
from t7_login

2.我们根据first_day进行分组,date_diff=0的为当天新增用户,date_diff=1的为次日登录的用户

select first_day,
       count(case when date_diff = 0 then user_id end) as new_cnt,
       count(case when date_diff = 1 then user_id end) as next_act_cnt
from (select user_id,
             login_date,
             min(login_date) over (partition by user_id order by login_date asc)                       as first_day,
             datediff(login_date, min(login_date) over (partition by user_id order by login_date asc)) as date_diff
      from t7_login) t
group by first_day
order by first_day asc

3.用次日留存数/新增用户数据即为留存率,因为新增可能为0,所以需要先判断。

CONCAT 函数在 SQL 中用于将两个或多个字符串值连接或拼接成一个字符串。这个函数非常实用,尤其是在你需要构造新的字符串或修改现有字符串时。

select fist_login ,
concat( if(new_cnt=0,0,ROUND(100*next_act_cnt/new_cnt,1)),'%') next_act_per from (
select fist_login,sum(CASE WHEN diff = 0 THEN 1 else 0 END) AS new_cnt,
sum(CASE WHEN diff = 1 THEN 1 else 0 END) AS next_act_cnt
from(
select user_id,login_date,min(login_date) over(partition by user_id ) fist_login,
datediff (login_date,min(login_date) over(partition by user_id )) diff
from t7_login
)temp
group by fist_login
order by fist_login asc) temp1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值