题解 | #日活与每日次日留存率#
日活与每日次日留存率
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时就是第二天没来不再统计,
第二天没来的天数 / 第一天来的天数 = 次日留存率
360集团公司福利 401人发布
查看9道真题和解析