题解 | #计算用户的平均次日留存率#

计算用户的平均次日留存率

https://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453

select
    sum(dc.d) / count(dc.d) avg_ret
from
    (
        select
            device_id,
            case
                when date - lag (date, 1) over (
                    partition by
                        device_id
                    order by
                        date
                ) = 1 then 1
                else 0
            end d
        from
            question_practice_detail
        group by
            device_id,
            date
        order by
            device_id,
            date
    ) dc

1、建立子查询:date-lag窗口函数,以device_id分区,以date排序,得到时间差,用case when对时间差为1的计数1,其他计数0

2、对子查询中的时间差列求和,得到连续刷题的个数,对子查询中的时间差列计数得到刷题总数,相除即可得到结果

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务