题解 | #日活与每日次日留存率#

日活与每日次日留存率

https://www.nowcoder.com/practice/18b168ada98d4bdb9108444443cea7d3

SELECT visit_date,dau,next_day_per FROM(
-- 日活
SELECT
    visit_date,
    COUNT(id) dau
FROM
    user_visit_log
GROUP BY
    visit_date) t2
, -- 两表连接
-- 次日留存率
(SELECT 
    date1,
    COUNT(date2)/COUNT(date1) next_day_per
FROM(
    SELECT 
        date1,
        date2 
    FROM (
        (SELECT  
            id,
            visit_date AS date1
         FROM user_visit_log) AS uvl1
LEFT JOIN
(SELECT  id,visit_date AS date2 FROM user_visit_log) AS uvl2
ON uvl1.id = uvl2.id 
AND DATE_ADD(uvl1.date1,INTERVAL 1 DAY) = uvl2.date2)

) AS t1
GROUP BY date1) t3
WHERE t2.visit_date = t3.date1

写次日留存率这类题目,就拿出一张表(表1)中的date当作第一天(去重当天连续多次登录的用户),与另一张表(表2)连接,条件是表1的date加一天=表2。这样输出了一个具有第一天date1和第二天date2的表

然后统计count(date1)和count(date2) ,当date2为null时就是第二天没来不再统计,

第二天没来的天数 / 第一天来的天数 = 次日留存率

全部评论

相关推荐

05-05 21:45
已编辑
广州大学 Java
点赞 评论 收藏
分享
代码飞升:简历差不多情况下你的学历已经加分了,海投就行,加油,不要追求尽善尽美
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务