计算用户的平均次日留存率

本文介绍如何使用SQL计算用户在刷题后的次日平均留存概率,为运营提供关键数据支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算用户的平均次日留存率

描述
题目:现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。
数据
查询结果

SQL语句
select count(t2.date)/count(t1.date) from
    (select distinct device_id,date from question_practice_detail) t1
    left join 
    (select distinct device_id,date from question_practice_detail) t2
    on t1.device_id =
### SQL 留存率计算示例题目 以下是几个经典的 SQL 留存率计算示例题目及其解决方案: #### 示例题目 1:次日留存率计算 假设有一张表 `user_log`,记录了用户的每日登录情况。字段如下: - `user_id`: 用户 ID - `login_date`: 登录日期 目标是计算每天新增用户次日留存率。 ##### 解决方案 可以通过自连接的方式实现。具体逻辑为: 1. 找到每一天的新增用户。 2. 判断这些新增用户是否在第二天再次登录。 3. 使用分组和聚合函数计算留存率。 ```sql WITH new_users AS ( SELECT user_id, MIN(login_date) AS first_login_date FROM user_log GROUP BY user_id ), retained_users AS ( SELECT n.user_id FROM new_users n JOIN user_log l ON n.user_id = l.user_id AND DATE_ADD(n.first_login_date, INTERVAL 1 DAY) = l.login_date ) SELECT DATE_FORMAT(first_login_date, '%Y-%m-%d') AS login_day, COUNT(DISTINCT CASE WHEN r.user_id IS NOT NULL THEN n.user_id END) * 1.0 / COUNT(DISTINCT n.user_id) AS retention_rate FROM new_users n LEFT JOIN retained_users r ON n.user_id = r.user_id GROUP BY DATE_FORMAT(first_login_date, '%Y-%m-%d'); ``` 此查询通过窗口函数找到每个用户的首次登录日期,并判断其是否在次日有登录行为[^1]。 --- #### 示例题目 2:N 日留存率计算 同样基于上述表结构,扩展需求为计算 N 天后的留存率(例如第 7 天)。 ##### 解决方案 可以修改条件来适应不同的时间间隔。 ```sql WITH new_users AS ( SELECT user_id, MIN(login_date) AS first_login_date FROM user_log GROUP BY user_id ), retained_users AS ( SELECT n.user_id FROM new_users n JOIN user_log l ON n.user_id = l.user_id AND DATE_ADD(n.first_login_date, INTERVAL 7 DAY) = l.login_date ) SELECT DATE_FORMAT(first_login_date, '%Y-%m-%d') AS login_day, ROUND(COUNT(DISTINCT CASE WHEN r.user_id IS NOT NULL THEN n.user_id END) * 1.0 / COUNT(DISTINCT n.user_id), 4) AS retention_rate_7_days FROM new_users n LEFT JOIN retained_users r ON n.user_id = r.user_id GROUP BY DATE_FORMAT(first_login_date, '%Y-%m-%d'); ``` 这里使用了 `DATE_ADD` 函数指定时间间隔为 7 天,并利用 `ROUND` 对结果进行四舍五入处理[^2]。 --- #### 示例题目 3:平均留存率计算 给定一张表 `question_practice_detail`,其中包含以下字段: - `device_id`: 设备 ID - `date`: 活跃日期 目标是计算整体的平均次日留存率。 ##### 解决方案 采用左连接方式匹配两天的数据并计算比例。 ```sql SELECT ROUND(COUNT(q2.device_id) * 1.0 / COUNT(q1.device_id), 4) AS avg_retention_rate FROM ( SELECT DISTINCT device_id, date FROM question_practice_detail ) q1 LEFT JOIN ( SELECT DISTINCT device_id, date FROM question_practice_detail ) q2 ON q1.device_id = q2.device_id AND DATEDIFF(q2.date, q1.date) = 1; ``` 这段代码的核心在于通过 `DATEDIFF` 函数筛选符合条件的设备 ID 并完成比率计算[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值