SQL面试题-留存率

留存率是衡量用户质量的最重要指标之一,因此计算用户留存率是用户数据分析中必须掌握的技能之一,同样也成为了面试经典sql之一。
留存率指标中,通常需要关注次日留存、3日留存、7日留存和月留存。对新增用户而言,需要关注更细颗粒度的数据,也就是7日内每天的留存率。

代码实现

select
    dt
    ,count( if(id=lead_id  and datediff(lead_dt,dt) =1 ,id, null ) ) as `1日留存`
    ,count( if(id=lead_id7 and datediff(lead_dt7,dt)=7 ,id, null ) ) as `7日留存`
from
(
    select
        id 
        ,dt
        ,lead(dt,1) over(partition by id order by dt asc ) as lead_dt
        ,lead(id,1) over(partition by id order by dt asc ) as lead_id
        ,lead(dt,7) over(partition by id order by dt asc ) as lead_dt7
        ,lead(id,7) over(partition by id order by dt asc ) as lead_id7
    from  
    (
        select 'slm' as id, '2018-12-26' as dt
        union all select 'slm' as id, '2018-12-27' as dt
        union all select 'slm' as id, '2018-12-28' as dt
        union all select 'hh ' as id, '2018-12-26' as dt
        union all select 'hh ' as id, '2018-12-28' as dt 
    ) a
) b
group by dt 
order by dt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值