次日留存率——mysql计算过程
问题:有一张表,有用户id、用户浏览时间a_time,计算每天的用户数、以及次日留存率、三日留存率
创建表user()
CREATE TABLE user (id INT, a_time DATE );
插入 10 条随机数据
INSERT INTO user (id, a_time)
SELECT FLOOR(RAND() * 100) + 1, -- 生成 1 到 100 之间的随机整数作为用户 IDNOW() - INTERVAL FLOOR(RAND() * 30) DAY -- 生成当前时间往前 30 天内的随机时间作为浏览时间
FROM (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10) AS numbers;
查看数据
select * from user order by id asc,a_time asc;
统计每天浏览的用户数
select a_time,count(distinct id) as 用户数
from user
group by a_time
order by a_time;
次日留存率
每个用户第一次浏览的时间表f 拼接 用户浏览时间表a 【ON f.id = a.id AND a.a_time = DATE_ADD(f.first_action_date, INTERVAL 1 DAY) -用户最先浏览的时间拼接他第二天浏览记录】
group by 第一次浏览时间,计数
SELECT first_action_date,COUNT(DISTINCT f.id) AS total_users,COUNT(DISTINCT a.id) AS retained_users,COUNT(DISTINCT a.id) / COUNT(DISTINCT f.id) AS next_day_retention_rate
FROM (SELECT id,MIN(a_time) AS first_action_dateFROM userGROUP BY id) f
LEFT JOIN user a ON f.id = a.id AND a.a_time = DATE_ADD(f.first_action_date, INTERVAL 1 DAY)
GROUP BY first_action_date;
三日留存率
同上,将1改3即可(往后推三天是否仍使用的用户)
DATE_ADD(f.first_action_date, INTERVAL 3 DAY)