用sql写用户留存和留存率

这篇具有很好参考价值的文章主要介绍了用sql写用户留存和留存率。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

统计留存数量和留存率
用mysql写的脚本

下面是登录日志表,包含两列数据,一列是客户号,一列是登录时间。
现在需要统计1-7日的留存和留存率,之前见过用自连接方式,如果7日就需要链接7次,效率偏低。如果我们自己左连接一次,使得user_id相等,那会出现,左表日期是全部日期,而他们的右表会连接到所有日期,我们条件中再加上左表的日期要小于右表的日期,那么剩下来的日期都是某一个客户留存的日期了。最后用右表日期减去左表日期,等于1,意味着一天后留存,2,代表两天后留存,3,4。。。以此类推。

– 登陆日志表
create table login_log(userser_id varchar(10),login_time datetime,primary key(userser_id,login_time));

insert into login_log valuseres
(‘user_02’,‘2022-07-02 00:14:00’),
(‘user_10’,‘2022-07-02 08:32:00’),
(‘user_03’,‘2022-07-02 09:20:00’),
(‘user_08’,‘2022-07-02 10:07:00’),
(‘user_04’,‘2022-07-02 10:29:00’),
(‘user_09’,‘2022-07-02 11:45:00’),
(‘user_05’,‘2022-07-02 12:19:00’),
(‘user_01’,‘2022-07-02 14:29:00’),
(‘user_15’,‘2022-07-03 00:26:00’),
(‘user_14’,‘2022-07-03 11:18:00’),
(‘user_11’,‘2022-07-03 13:18:00’),
(‘user_16’,‘2022-07-03 14:33:00’),
(‘user_06’,‘2022-07-04 07:51:00’),
(‘user_18’,‘2022-07-04 08:11:00’),
(‘user_07’,‘2022-07-04 09:27:00’),
(‘user_10’,‘2022-07-04 10:59:00’),
(‘user_20’,‘2022-07-04 11:51:00’),
(‘user_03’,‘2022-07-04 12:37:00’),
(‘user_17’,‘2022-07-04 15:07:00’),
(‘user_08’,‘2022-07-04 16:35:00’),
(‘user_01’,‘2022-07-04 19:29:00’),
(‘user_14’,‘2022-07-05 08:03:00’),
(‘user_12’,‘2022-07-05 10:27:00’),
(‘user_15’,‘2022-07-05 16:33:00’),
(‘user_19’,‘2022-07-06 09:03:00’),
(‘user_20’,‘2022-07-06 15:26:00’),
(‘user_04’,‘2022-07-08 11:03:00’),
(‘user_05’,‘2022-07-08 12:54:00’),
(‘user_06’,‘2022-07-08 19:22:00’),
(‘user_13’,‘2022-07-09 10:20:00’),
(‘user_15’,‘2022-07-09 16:40:00’),
(‘user_18’,‘2022-07-10 21:34:00’);

脚本如下:

SELECT
date(a.login_time),
COUNT(DISTINCT a.user_id) 第一天客户数,
sum(DATEDIFF(b.login_time,a.login_time)=1) 1留存数,
sum(DATEDIFF(b.login_time,a.login_time)=2) 2留存数,
sum(DATEDIFF(b.login_time,a.login_time)=3) 3留存数,
sum(DATEDIFF(b.login_time,a.login_time)=4) 4留存数,
sum(DATEDIFF(b.login_time,a.login_time)=5) 5留存数,
sum(DATEDIFF(b.login_time,a.login_time)=6) 6留存数,
sum(DATEDIFF(b.login_time,a.login_time)=7) 7留存数,
sum(DATEDIFF(b.login_time,a.login_time)<=1) 1内留存数,
sum(DATEDIFF(b.login_time,a.login_time)<=2) 2内留存数,
sum(DATEDIFF(b.login_time,a.login_time)<=3) 3内留存数,
sum(DATEDIFF(b.login_time,a.login_time)<=4) 4内留存数,
sum(DATEDIFF(b.login_time,a.login_time)<=5) 5内留存数,
sum(DATEDIFF(b.login_time,a.login_time)<=6) 6内留存数,
sum(DATEDIFF(b.login_time,a.login_time)<=7) 7内留存数,
sum(DATEDIFF(b.login_time,a.login_time)<=1)/count(DISTINCT a.user_id) 1内留存率,
sum(DATEDIFF(b.login_time,a.login_time)<=2)/count(DISTINCT a.user_id) 2内留存率,
sum(DATEDIFF(b.login_time,a.login_time)<=3)/count(DISTINCT a.user_id) 3内留存率,
sum(DATEDIFF(b.login_time,a.login_time)<=4)/count(DISTINCT a.user_id) 4内留存率,
sum(DATEDIFF(b.login_time,a.login_time)<=5)/count(DISTINCT a.user_id) 5内留存率,
sum(DATEDIFF(b.login_time,a.login_time)<=6)/count(DISTINCT a.user_id) 6内留存率,
sum(DATEDIFF(b.login_time,a.login_time)<=7)/count(DISTINCT a.user_id) 7内留存率,
sum(DATEDIFF(b.login_time,a.login_time)<=8)/count(DISTINCT a.user_id) 8内留存率,
sum(DATEDIFF(b.login_time,a.login_time)<=9)/count(DISTINCT a.user_id) 9内留存率

from login_log a
left join login_log b
on a.user_id=b.user_id and a.login_time<b.login_time
GROuP BY date(a.login_time)
order by date(a.login_time);文章来源地址https://www.toymoban.com/news/detail-516663.html

到了这里,关于用sql写用户留存和留存率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【业务数据分析】—— 用户留存分析(以挖掘Aha时刻为例)

    🤵‍♂️ 个人主页:@Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+   目录 一、用户留存是什么 二、为什么要考虑用户留存 1、为什么要考虑

    2024年02月06日
    浏览(55)
  • 【数据库二】数据库用户管理与授权

    CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同,在存储或检索过程中不进行大小写转换。 下表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别: 字节大小 char无论是否有值,都

    2024年02月09日
    浏览(51)
  • 数据库用户管理

    1.新建用户: ‘用户名’:指定将创建的用户名. ‘来源地址’:指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录,可用通配符% ‘密码’:若使用明文密码,直接输入’密码’,插入到数据库时由Mysql自

    2024年02月16日
    浏览(51)
  • 【数据库·关系数据库标准语言SQL·学习笔记】Microsoft SQL Server数据库的建立和删除

    开发环境:SQL Server Management Studio(SSMS) 利用数据库对象资源管理器创建数据库 (1)右击对象资源管理器中的数据库,选择新建数据库 (2)在新建数据库界面输入数据库名称 ,并选择确定 利用CREAT DATABASE命令在SSM工具的新建查询中创建数据库 1.语法格式 CREATE DATABASE dat

    2024年02月08日
    浏览(60)
  • SQL Server 数据库之SQL Server 数据库的安全设置

    数据库服务器是所有应用的数据中转站,若数据库服务被恶意攻击,可能会造成数据泄露、数据丢失、数据被恶意篡改等诸多无法挽回的损失; 所以,对数据库进行安全设置是每一个数据库管理人员都应掌握的知识; SQL Server 登录模式分为 “Windows 身份验证模式” 和 “SQL

    2024年02月06日
    浏览(80)
  • 简单认识数据库用户管理

    格式 :CREATE USER ‘用户名’@‘来源地址’ [IDENTIFIED BY [PASSWORD] ‘密码’]; 用户名 :指定将创建的用户名. 来源地址 :指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录可用通配符% 密码 :若使用明文密码

    2024年02月16日
    浏览(38)
  • 【数据库 - 用户权限管理】(简略)

    目录 一、概述 二、用户权限类型 1.ALL PRIVILEGES 2.CREATE 3.DROP 4.SELECT 5.INSERT 6.UPDATE 7.DELETE 8.INDEX 9.ALTER 10.CREATE VIEW和CREATE ROUTINE 11.SHUTDOWN 12GRANT OPTION 三、语句格式 1.用户赋权 2.权限删除 3.用户删除 数据库用户权限管理是数据库系统中非常重要的一个方面,它用于控制不同用户访问

    2024年02月15日
    浏览(37)
  • MySQL数据库用户管理

    primary key主键约束:字段的值不能重复,不能为null,一个表只能有一个主键 unique key唯一性约束:字段的值不能重复,能为null,一个表可有多个唯一键 not null非空约束:字段的值不能为null default默认值约束: 字段的值如果没有设置则使用默认值自动填充 auto_increment自增约束:

    2024年02月08日
    浏览(57)
  • Mysql数据库用户操作

    # Mysql数据库用户操作 ## 1.1创建用户 ```shell create user ‘nz’ identified by ‘123456’ # hzm:用户账号,123456:密码 create user ‘nz’@’%’ identified by ‘123456’ #所有ip都可用账号 create user ‘nz’@’localhost’ identified by ‘123456’ #本地可用账号 create user ‘nz’@’192.168.12.1’ identified

    2024年02月16日
    浏览(58)
  • SQL Server数据库——创建数据库

    目录 一、界面方式创建数据库 1.1创建数据库xscj,数据文件和日志文件的属性按默认值设置  1.2在xscj数据库中增加文件xcsj1,其属性均取系统默认值  1.3在数据库xscj中增加一个名为myGroup的文件组。 1.4数据库的重命名  1.5数据库的删除  二、命令方式创建数据库 以创建学生管

    2024年02月01日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包