sql练习:计算用户的平均次日留存率

记录一下今天遇见的一道sql题

要求结果:

首先得知道平均次日留存率的计算公式

p=(这段时间内所有用户连续两天登录的次数)/(这段时间内所有用户登录的总次数)

求这段时间内所有用户登录的日期为表a

select distinct device_id,date from question_practice_detail

将用户登录过的日期全部减一天得到表b

select distinct device_id,date_sub(date,interval 1 day) as date

    from question_practice_detail

a表和b表进行左外连接,求某个用户前一天是否登录

select * from 
(select distinct device_id,date from question_practice_detail ) a
left join 
(
    select distinct device_id,date_sub(date,interval 1 day) as date
    from question_practice_detail
) b
on a.device_id = b.device_id and a.date = b.date

求用户连续两天都登录的次数 

select a.device_id , if(b.device_id is not null,1,0) temp
from
(select distinct device_id,date from question_practice_detail ) a
left join 
(
    select distinct device_id,date_sub(date,interval 1 day) as date
    from question_practice_detail
) b
on a.device_id = b.device_id and a.date = b.date

求平均次日留存率

select avg (if(b.device_id is not null,1,0)) as avg_ret
from
(select distinct device_id,date from question_practice_detail ) a
left join 
(
    select distinct device_id,date_sub(date,interval 1 day) as date
    from question_practice_detail
) b
on a.device_id = b.device_id and a.date = b.date

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值