mysql查询用户留存语法、次日留存、三日留存、7日留存

表结构

CREATE TABLE `tb_user_tj`  (
	`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
	`uid` int(11) NOT NULL COMMENT '用户UId',
	`client` tinyint(4) NOT NULL DEFAULT '1' COMMENT '1 安卓 2 苹果',
	`day` date NOT NULL COMMENT '统计日期'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='留存明细表';

计算某日用户留存率(次日、3日、7日、30日,…)

-- 计算某日用户留存率(次日、3日、7日、30日,...)
select *,
	concat(round(100*次日留存用户/日活跃用户数,2),'%')  '次日留存率',
	concat(round(100*三日留存用户/日活跃用户数,2),'%')  '三日留存率',
	concat(round(100*七日留存用户/日活跃用户数,2),'%')  '七日留存率'
from (
	select 
		a.day,
		count(distinct a.uid) '日活跃用户数',
		count(distinct b.uid) '次日留存用户',
		count(distinct c.uid) '三日留存用户',
		count(distinct d.uid) '七日留存用户'
	from tb_user_tj a 
		left join tb_user_tj b on a.uid = b.uid and b.day = a.day + 1
		left join tb_user_tj c on a.uid = c.uid and c.day = a.day + 3
		left join tb_user_tj d on a.uid = d.uid and d.day = a.day + 7 
	group by a.day
) p;

计算某日新增用户留存率(次日、3日、7日、30日、…)

-- 计算某日新增用户留存率(次日、3日、7日、30日、...)
select *,
concat(round(100*次日留存用户/日新增用户数,2),'%')  '次日留存率',
concat(round(100*三日留存用户/日新增用户数,2),'%')  '三日留存率',
concat(round(100*七日留存用户/日新增用户数,2),'%')  '七日留存率' 
from 
(	
	select 
	c.day '日期',
	count(distinct c.uid)  '日新增用户数',
	count(distinct d.uid)  '次日留存用户',
	count(distinct e.uid)  '三日留存用户',
	count(distinct f.uid)  '七日留存用户'
	from 
	(
		select a.*
		from tb_user_tj a 
		left join tb_user_tj b on a.uid = b.uid and b.day < a.day
		where b.day is null
	) c
	left join tb_user_tj d on c.uid = d.uid and  d.day = c.day + 1 
	left join tb_user_tj e on c.uid = e.uid and  e.day = c.day + 3
	left join tb_user_tj f on c.uid = f.uid and  f.day = c.day + 7 
	group by c.day
) p;

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL 次日、七、30 留存率的计算方法类似,都需要对用户在第一天的活跃行为进行追踪,然后在指定的时间后再次对这些用户进行追踪,计算这些用户在第一天和指定时间都有活跃行为的比例即可得到留存率。 以下是一个示例查询,假设我们有一个名为 user_activity 的表,其中包含用户 ID、期和活动类型等列: - 次日留存率: ``` SELECT COUNT(DISTINCT ua1.user_id) / COUNT(DISTINCT ua2.user_id) AS retention_rate FROM user_activity ua1 INNER JOIN user_activity ua2 ON ua1.user_id = ua2.user_id AND ua2.date = DATE_ADD(ua1.date, INTERVAL 1 DAY) WHERE ua1.date = '2021-01-01' AND ua1.activity_type = 'login' AND ua2.activity_type = 'login'; ``` 这个查询会返回在 2021 年 1 月 1 登录过并在次日也登录过的用户占所有登录过的用户的比例,即次日留存率。 - 七留存率: ``` SELECT COUNT(DISTINCT ua1.user_id) / COUNT(DISTINCT ua2.user_id) AS retention_rate FROM user_activity ua1 INNER JOIN user_activity ua2 ON ua1.user_id = ua2.user_id AND ua2.date = DATE_ADD(ua1.date, INTERVAL 7 DAY) WHERE ua1.date = '2021-01-01' AND ua1.activity_type = 'login' AND ua2.activity_type = 'login'; ``` 这个查询会返回在 2021 年 1 月 1 登录过并在 7 天后也登录过的用户占所有登录过的用户的比例,即七留存率。 - 30 留存率: ``` SELECT COUNT(DISTINCT ua1.user_id) / COUNT(DISTINCT ua2.user_id) AS retention_rate FROM user_activity ua1 INNER JOIN user_activity ua2 ON ua1.user_id = ua2.user_id AND ua2.date = DATE_ADD(ua1.date, INTERVAL 30 DAY) WHERE ua1.date = '2021-01-01' AND ua1.activity_type = 'login' AND ua2.activity_type = 'login'; ``` 这个查询会返回在 2021 年 1 月 1 登录过并在 30 天后也登录过的用户占所有登录过的用户的比例,即 30 留存率。 ### 回答2: MySQL 中的次日、七和30留存率是指用户在特定期访问应用后,持续访问的用户占总用户数的百分比。 次日留存率指的是用户在第一次访问应用后的24小时内再次访问应用的用户占总用户数的比例。计算方式为,将第二天仍然使用应用的用户数除以第一天的总用户数,并乘以100。 七留存率指的是用户在第一次访问应用后的一周内再次访问应用的用户占总用户数的比例。计算方式为,将第七天仍然使用应用的用户数除以第一天的总用户数,并乘以100。 30留存率指的是用户在第一次访问应用后的30天内再次访问应用的用户占总用户数的比例。计算方式为,将第三十天仍然使用应用的用户数除以第一天的总用户数,并乘以100。 这些留存率的计算可以帮助企业了解用户对应用的忠诚度和持续使用程度,从而评估应用的用户粘性和用户留存情况。如果留存率较高,说明用户对应用比较满意且有持续使用的需要。如果留存率较低,说明用户对应用的兴趣不大或者体验不佳,可能需要改进产品或采取措施提高用户的黏性和留存率。 ### 回答3: MySQL是一种流行的关系型数据库管理系统,可以用于储存和管理数据。留存率是指用户在某个时间段后继续使用应用的比例。对于MySQL数据库来说,我们可以通过查询数据来计算并分析次日、七和30留存率。 首先,我们需要确保数据库中有记录用户的活动数据,包括用户的ID和活动发生的时间戳。假设我们有一个名为user_activity的表,该表包含了用户ID和活动时间的记录。 要计算次日留存率,我们需要先确定哪些用户在某一天访问了应用,并记录下来。然后,在第二天,我们再次查询哪些用户又访问了应用。最后,我们将当天访问过应用的用户数除以前一天访问过应用的用户数,得到次日留存率。 举个例子,假设2月1有100个用户访问了应用,而2月2又有30个用户继续访问了应用。则次日留存率为30/100=0.3,即30%。 类似地,七和30留存率也可以通过类似的方式计算。需要查询哪些用户在某一天访问了应用,并记录下来。然后,在第七天和第三十天分别查询哪些用户又访问了应用。最后,将当天访问过应用的用户数除以一开始访问过应用的用户数,得到七和三十留存率。 通过计算和分析这些留存率,我们可以了解到用户在应用的使用中的持续程度,判断应用的用户粘性以及用户的忠诚度。根据这些数据,开发者可以优化应用,提升用户留存率,并增加用户的活跃度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值