今天我们来分享一个常见案例,用SQL来计算用户留存率。
目录:
1. 案例数据
这里我们一共两份日志数据,分别是用户账号创建
的日志以及用户登录
的日志。
账号创建日志
账号创建日志
用户登录日志
登录日志
2. 思路分析
所谓留存,就是指某日创建的账号在后续自然日登录的比例,比如3月1日新增账号创建数为100,在3月2日这部分用户登录数为51,那么3月1日新增用户的次日留存率为51/100=51%。
注意:我这里用的MYSQL
环境
基于上述的理解,我们大概就有了以下思路:
DISTINCT
处理SELECT DISTINCT
STR_TO_DATE( $part_date, '%Y-%m-%d' ) login_date,
role_id
FROM
role_login
inner join
(这里考虑到不在统计周期内的创建账号的用户数据也会记录在用户登录日志里,所以去掉)SELECT
login_log.role_id,
create_date,
login_date
FROM
((
SELECT DISTINCT
STR_TO_DATE( $part_date, '%Y-%m-%d' ) login_date,
role_id
FROM
role_login
) login_log
INNER JOIN ( SELECT DISTINCT STR_TO_DATE( $part_date, '%Y-%m-%d' ) create_date, role_id FROM role_create ) create_log ON ( login_log.role_id = create_log.role_id ))
DATEDIFF
获取第几天登录SELECT
login_log.role_id,
create_date,
DATEDIFF( login_date, create_date ) day_diff
FROM
...
SELECT
create_date
, count((CASE WHEN (day_diff = 0) THEN role_id END)) 新增用户数
, count((CASE WHEN (day_diff = 1) THEN role_id END)) 次日留存
, count((CASE WHEN (day_diff = 2) THEN role_id END)) 3日留存
, count((CASE WHEN (day_diff = 7) THEN role_id END)) 7日留存
FROM
temp_1
GROUP BY
create_date
3. 完整代码
SELECT
create_date
, 新增用户数
, concat(CAST(ROUND((100 * 次日留存) / 新增用户数,2) AS char), '%') 次日留存率
, concat(CAST(ROUND((100 * 3日留存) / 新增用户数,2) AS char), '%') 3日留存率
, concat(CAST(ROUND((100 * 7日留存) / 新增用户数,2) AS char), '%') 7日留存率
FROM
(
SELECT
create_date
, count((CASE WHEN (day_diff = 0) THEN role_id END)) 新增用户数
, count((CASE WHEN (day_diff = 1) THEN role_id END)) 次日留存
, count((CASE WHEN (day_diff = 2) THEN role_id END)) 3日留存
, count((CASE WHEN (day_diff = 7) THEN role_id END)) 7日留存
FROM
(
SELECT
login_log.role_id
, create_date
, DATEDIFF(login_date, create_date) day_diff
FROM
((
SELECT DISTINCT
STR_TO_DATE($part_date, '%Y-%m-%d') login_date
, role_id
FROM
role_login
) login_log
INNER JOIN (
SELECT DISTINCT
STR_TO_DATE($part_date, '%Y-%m-%d') create_date
, role_id
FROM
role_create
) create_log ON (login_log.role_id = create_log.role_id))
) temp_1
GROUP BY create_date
) temp_2
ORDER BY create_date ASC
以上就是本次全部内容,由于不同的sql环境语法存在些许差异,大家视情况而处理吧。
- END -
对比Excel系列图书累积销量达15w册,让你轻松掌握数据分析技能,可以在全网搜索书名进行了解选购:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/junhongzhang/article/details/124161699
内容来源于网络,如有侵权,请联系作者删除!