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

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

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

# 这个理论上知道怎么弄,但是转换到MySQL命令上就毫无头绪
# 看讨论区的解题情况


# select 
#     round(count(distinct q2.device_id,q2.date)/count(distinct q1.device_id,q1.date),4) as avg_ret
# from question_practice_detail q1 
# left outer join question_practice_detail q2 
# on DATEDIFF(q1.date,q2.date)=1 and q1.device_id = q2.device_id;


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


SELECT 
    ROUND(AVG(IF(q2.date IS NOT NULL, 1, 0)), 4) AS avg_ret
FROM 
    (SELECT DISTINCT device_id, date FROM question_practice_detail) q1
LEFT JOIN 
    (SELECT DISTINCT device_id, date FROM question_practice_detail) q2
ON 
    q1.device_id = q2.device_id
    AND q2.date = DATE_ADD(q1.date, INTERVAL 1 DAY);



全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务