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

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

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

select
    case
        when count(q1.device_id) = 0 then null
        else (count(q2.device_id)/count(q1.device_id))
    end as avg_ret 
from
    (
        select distinct
            device_id, date
        from
            question_practice_detail
    ) as q1
    left join
    (
        select distinct
            device_id,
            date
        from
            question_practice_detail
    ) as q2 
    on q1.device_id = q2.device_id
    and q2.date = date_add(q1.date,interval 1 day)

次日留存,指同一用户在当天和第二天都刷题,不用过多思考什么第三天刷题什么的。

子查询两个相同的表格,按照第二个表格的日期是第一个表的日期之后一天进行连接,此处有空,注意使用left join

表示第二个表格日期是第一个表格日期后一天,即两天日期做差为1,q2.date=date_add(q1.date,interval 1 day)。

date_add函数用于将指定的日期值加到某一日期上

DATE_ADD(date, INTERVAL expr unit)

date是被加的日期,interval关键词,exper是日期数量,unit是单位(day,month,year)

例:将一年零三个月加到日期2000/09/27:

SELECT DATE_ADD('2000-09-27', INTERVAL 1 YEAR + 3 MONTH) AS new_date;

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务