如何用 SQL 做留存率分析?

本文介绍了如何使用SQL计算新客留存率,包括次日、3日、7日和30日留存率,以及如何分析留存率下降的原因和提高留存率的策略。通过创建视图和利用留存时间计算用户留存状态,从而进行详细的数据分析。

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

无论是产品经理、产品运营还是数据分析师,在评估一个产品的用户使用情况时肯定离不开留存率、忠诚度等观测指标。这些指标可以反映用户对于产品的粘性、产品用户价值质量的高低,及时了解用户留存、流失趋势,有助于帮助产品做更好的功能迭代,也有助于运营及时进程运营策略的调整,比如:当新用户留存率低的时候,是不是需要调整新用户的活动策略,或者当老用户留存率低的时候,是不是某个产品功能的问题,或者活动对老用户不友好而导致流失等等……

今天,就给大家分享下如何用SQL实现留存率的计算,以及日常工作中如何分析留存率这个指标。

01 

什么是留存率

留存顾名思义是指留下来。留存用户是指用户在APP产生行为后,在固定的第N日继续访问或使用APP的用户。留存率是指用户在一段时间后或固定的间隔后产生留存用户的比例。

用户留存率有很多种:新客留存率、老客留存率、活跃用户留存率、购买留存率、或者某个功能使用用户的留存率等,通常计算的时间间隔为次日、3日、7日、30日、60日,根据业务不同需求可以选择不同的计算方式以及时间间隔,重点是要和产品负责人以及运营人员对好指标口径。

本次分享的留存率是关于新客留存率,计算公式:第N日新客留存率=某日的新注册用户在第N日内访问过APP的留存用户数/某日的新注册用户总数。

次日新客留存率(第1日新客留存率):指注册APP后的第二天有访问APP的行为的留存用户/注册APP当天的新客总数。

第3日新客留存率:指注册APP后第3天内内访问过APP的留存用户/注册APP当天的新客户总数。

第7日新客留存率:指注册APP后第7天内访问过APP的留存用户/注册APP当天的新客户总数。

第30日新客留存率:指注册APP后第30内访问过APP的留存用户/注册APP当天的新客户总数。

02

如何用SQL实现留存率计算

1.  计算新客留存率用到的字段信息有:用户ID,用户登录日期;

创建一张只有用户ID和用户登录日期的表:

 

CREATE TABLE IF NOT EXISTS user_log
(
    'id' int(11) NOT NULL AUTO_INCREMENT,
    'operator_id'        STRING   COMMENT '登录用户ID',
    'create_time'        DATETIME COMMENT '创建时间'
    PRIMARY KEY (`id`) USING BTREE

### 如何用SQL计算用户留存率 在数据分析领域,尤其是针对To C企业,用户留存率是一个重要的业务指标。它反映了企业在一定时间范围内能够留住新用户的程度。以下是通过SQL实现用户留存率的具体方法。 #### 数据准备 假设有一个表 `user_log` 记录了用户的登录行为,其结构如下: | 字段名 | 描述 | |--------------|----------------------| | role_id | 用户唯一标识 | | login_date | 登录日期 | 为了计算不同时间段内的留存情况,通常会先构建一张临时表来记录每个用户的首次登录时间和每次登录的时间差。可以通过以下 SQL 创建这样的中间表: ```sql WITH temp_1 AS ( SELECT role_id, MIN(login_date) OVER (PARTITION BY role_id) AS create_date, -- 首次登录日期 DATEDIFF(login_date, MIN(login_date) OVER (PARTITION BY role_id)) AS day_diff -- 时间间隔 FROM user_log ) ``` 此部分逻辑用于标记每位用户的首次登录日期以及之后每一相对于首次登录的数差异[^2]。 #### 留存率计算 基于上述中间表 `temp_1`,可以进一步统计每日新增用户及其对应的 N 日留存数量。具体 SQL 实现如下所示: ```sql SELECT create_date, COUNT(CASE WHEN day_diff = 0 THEN role_id END) AS 新增用户数, COUNT(CASE WHEN day_diff = 1 THEN role_id END) AS 次日留存, COUNT(CASE WHEN day_diff = 2 THEN role_id END) AS 三日留存, COUNT(CASE WHEN day_diff = 7 THEN role_id END) AS 七日留存 FROM temp_1 GROUP BY create_date; ``` 该语句按照每的新注册用户分组,并分别统计新增用户数、次日留存用户数、第三日留存用户数和第七日留存用户数。 #### 结果解释 以上查询的结果将返回每一批新增用户的留存状况。例如,在某一新增了100位用户,则可以根据后续几的实际登录人数得出相应的百分比作为留存率。比如如果第二60人再次访问应用,则次日留存率60%;同理可得其他周期的数值[^3]。 #### 注意事项 - **数据清洗**:确保原始数据质量良好,无重复记录或异常值干扰分析结果。 - **性能优化**:当处理大规模历史数据时需考虑索引设计及分区策略以提升执行效率。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值