欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 次日留存率——mysql计算过程

次日留存率——mysql计算过程

2025/2/28 18:19:42 来源:https://blog.csdn.net/m0_47147246/article/details/145910950  浏览:    关键词:次日留存率——mysql计算过程

次日留存率——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)

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词