Mysql查询用户留存/留存率问题--用户n日(内)留存、某日新增用户n日(内)留存_n日留存-程序员宅基地

技术标签: sql  

来源:数据运营与数据分析

Mysql查询用户留存/留存率语法

  • 计算某日的客户在第n日再次出现的概率--用户n日留存率。

  • 计算某日的客户在某个时间段内再次出现的概率--用户n日内留存率。

  • 计算某日新增的用户在第n日再次出现的概率--新用户n日留存率。

  • 计算某日新增的用户在某个时间段内再次出现的概率--新用户n日内留存率。

1.用户n日留存/留存率

计算某日的客户在第n日再次出现的概率--用户n日留存率。

  • 表名:订单总表;字段:客户编号,下单时间

-- 1.用户n日留存/留存率
-- 用户次日、3日、7日、30日,...留存/留存率

select *,
 concat(round(100*次日留存用户/日活跃用户数,2),'%')  次日留存率,
 concat(round(100*三日留存用户/日活跃用户数,2),'%')  三日留存率,
 concat(round(100*七日留存用户/日活跃用户数,2),'%')  七日留存率
from (
 select 
  date(a.下单时间) as 日期,
  count(distinct a.客户编号) as 日活跃用户数,
  count(distinct b.客户编号) as 次日留存用户,
  count(distinct c.客户编号) as 三日留存用户,
  count(distinct d.客户编号) as 七日留存用户
 from 订单总表 a 
  left join 订单总表 b 
   on a.客户编号 = b.客户编号 
   and date(b.下单时间) = date(a.下单时间) + 1
  left join 订单总表 c 
   on a.客户编号 = c.客户编号 
   and date(c.下单时间) = date(a.下单时间) + 3
  left join 订单总表 d 
   on a.客户编号 = d.客户编号 
   and date(d.下单时间) = date(a.下单时间) + 7
 where date(a.下单时间) between "2020/09/01" and "2020/09/05" 
 group by date(a.下单时间)
) p;

2.用户n日内留存/留存率

计算某日的客户在某个时间段内再次出现的概率--用户n日内留存率。

-- 2.用户n日内留存/留存率
-- 用户次日内、3日内、7日内、30日内,...留存/留存率

select *,
 concat(round(100*次日内留存用户/日活跃用户数,2),'%')  次日内留存率,
 concat(round(100*三日内留存用户/日活跃用户数,2),'%')  三日内留存率,
 concat(round(100*七日内留存用户/日活跃用户数,2),'%')  七日内留存率
from (
 select 
  date(a.下单时间) as 日期,
  count(distinct a.客户编号) as 日活跃用户数,
  count(distinct b.客户编号) as 次日内留存用户,
  count(distinct c.客户编号) as 三日内留存用户,
  count(distinct d.客户编号) as 七日内留存用户
 from 订单总表 a 
  left join 订单总表 b 
   on a.客户编号 = b.客户编号 
   and date(b.下单时间) = date(a.下单时间) + 1
  left join 订单总表 c 
   on a.客户编号 = c.客户编号 
   and (date(c.下单时间) BETWEEN date(a.下单时间) + 1 AND date(a.下单时间) + 3)
  left join 订单总表 d 
   on a.客户编号 = d.客户编号 
   and (date(d.下单时间) BETWEEN date(a.下单时间) + 1 AND date(a.下单时间) + 7)
 where date(a.下单时间) between "2020/09/01" and "2020/09/05" 
 group by date(a.下单时间)
) p;

3.新增用户n日留存/留存率

计算某日新增的用户在第n日再次出现的概率--新用户n日留存率。

## 3.某日新增用户留存/留存率
## 计算某日新增的用户在次日、3日、7日的留存率--新用户n日留存

select *,
 concat(round(100*次日留存用户/日新增用户数,2),'%')  次日留存率,
 concat(round(100*三日留存用户/日新增用户数,2),'%')  三日留存率,
 concat(round(100*七日留存用户/日新增用户数,2),'%')  七日留存率
from (
 select 
  date(a.下单时间) as 新增日期,
  count(distinct a.客户编号) as 日新增用户数,
  count(distinct b.客户编号) as 次日留存用户,
  count(distinct c.客户编号) as 三日留存用户,
  count(distinct d.客户编号) as 七日留存用户
 from 
 (
  select  
   date(t1.下单时间) as 下单时间,
   t1.客户编号 
  from 订单总表 as t1
   left join 订单总表 as t2
   on t1.客户编号=t2.客户编号
   and t2.下单时间<t1.下单时间
  where 
   (date(t1.下单时间) between "2020/09/01" and "2020/09/05") 
  and t2.下单时间 is Null  
 ) as a 
  left join 订单总表 b 
   on a.客户编号 = b.客户编号 
   and date(b.下单时间) = date(a.下单时间) + 1
  left join 订单总表 c 
   on a.客户编号 = c.客户编号 
   and date(c.下单时间) = date(a.下单时间) + 3
  left join 订单总表 d 
   on a.客户编号 = d.客户编号 
   and date(d.下单时间) = date(a.下单时间) + 7
 group by date(a.下单时间)
) p;

4.新增用户n日内留存率

计算某日新增的用户在次日内、3日内、7日内的留存率--新用户n日内留存率。

## 4.新增用户n日内留存率
## 计算某日新增的用户在次日内、3日内、7日内的留存率--新用户n日内留存率。
select *,
 concat(round(100*次日留存用户/日新增用户数,2),'%')  次日留存率,
 concat(round(100*三日留存用户/日新增用户数,2),'%')  三日留存率,
 concat(round(100*七日留存用户/日新增用户数,2),'%')  七日留存率
from (
 select 
  date(a.下单时间) as 新增日期,
  count(distinct a.客户编号) as 日新增用户数,
  count(distinct b.客户编号) as 次日留存用户,
  count(distinct c.客户编号) as 三日留存用户,
  count(distinct d.客户编号) as 七日留存用户
 from 
 (
  select  
   date(t1.下单时间) as 下单时间,
   t1.客户编号 
  from 订单总表 as t1
   left join 订单总表 as t2
   on t1.客户编号=t2.客户编号
   and t2.下单时间<t1.下单时间
  where 
   (date(t1.下单时间) between "2020/09/01" and "2020/09/05") 
  and t2.下单时间 is Null  
 ) as a 
  left join 订单总表 b 
   on a.客户编号 = b.客户编号 
   and date(b.下单时间) = date(a.下单时间) + 1
  left join 订单总表 c 
   on a.客户编号 = c.客户编号 
   and (date(c.下单时间) BETWEEN date(a.下单时间) + 1 AND date(a.下单时间) + 3)
  left join 订单总表 d 
   on a.客户编号 = d.客户编号 
   and (date(d.下单时间) BETWEEN date(a.下单时间) + 1 AND date(a.下单时间) + 7)
 group by date(a.下单时间)
) p;

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41685388/article/details/109299885

智能推荐

安装centos7之后要做的几件事_centos libtoolize-程序员宅基地

文章浏览阅读5.5k次,点赞3次,收藏6次。本文主要记录安装Centos7之后要做的几件事,作为备忘一 安装第三方源:(此处以aliyun为例)ps:本文所配置环境均为root权限下,如需在普通环境下配置,命令之前请加上sudoEPEL源: yum install epel-release执行完该命令后,在 /etc/yum.repos.d 目录下会多一个 epel.repo 文件ELRepo 源ELRepo 包含..._centos libtoolize

echarts 显示下载按钮,echarts 自定义按钮,echarts 添加按钮-程序员宅基地

文章浏览阅读2.5k次。echarts 显示下载按钮,echarts 自定义按钮,echarts 添加按钮 &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&_echarts 图标上的下载按钮不能用

el-table表头添加图标_el table 表头加图片-程序员宅基地

文章浏览阅读149次。el-table的表头添加特殊内容。_el table 表头加图片

如何防止网页的背景图片重复 no-repeat_网页重复背景-程序员宅基地

文章浏览阅读1.2w次。(1)现在一般都用css设定了,比如在一个div下设背景图片切不让其重复,则可设一个样式,比如:.nobgrepeat{background:url(背景图片地址) left top no-repeat;}(2)也可以设置背景图片的高宽,要与背景图片的大小一样注意:但是有时候加了 no-repeate之后,图片就会不见了,这种情况与设置的 left _网页重复背景

计算机网络的性能指标以及相关计算_计算机网络数据率计算公式-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏17次。用来表示网络的通信线路所能传送数据的能力,因此网络带宽表示在单位时间内从网络中的某一点到另一点所能通过的"最高数据率"单位和速率一样:b/s(kb/s,Mb/s,Gb/s);RTT计算公式:因为是从发送方发送完数据才开始计算的所以公式中并没有结点A的发送时延,但是有结点B的发送时延;结论:若主机在一段链路上连续不断的发送分组,则总时延为所有分组的发送时延+信号在这一段链路上的传播时延;吞吐量受网络的带宽或额定速率的限制;分组丢失率,是指在一定的时间范围内,传输过程中的丢失的分组数量与总分组数量的比率;_计算机网络数据率计算公式

012信息打点-Web应用&企业产权&指纹识别&域名资产&网络空间&威胁情报_资产指纹和应用-程序员宅基地

文章浏览阅读188次。针对各种应用的信息收集(Web网站、APP应用、PC应用、小程序应用、微信公众号等企业资产分五类:Web应用、APP应用、PC端应用、小程序应用、微信公众号、其他产品信息收集目标:某某企业、某某学校、网址、ip地址_资产指纹和应用

随便推点

《QT从基础到进阶·三十五》QT插件实现侧边工具栏tabBar_qt侧面工具栏-程序员宅基地

文章浏览阅读655次,点赞3次,收藏4次。内部先拿到TabBar的dll转为QObject,再把QObject强转为TabBarPlugin对象,这是插件的使用方法,也可以直接new一个TabBarPlugin对象。四个小工具也是由插件实现,先拿到他们的对象,通过对象指针获取他们的界面,再把每个界面addWidget添加到标签栏中。(2)调换tabBar标签栏中所有界面的循序和删除小工具界面。(3)把tabBar标签栏中的小工具界面拖出来在放回去。3、现在可以对标签栏上的所有界面进行交互。(1)可以收缩和展开tabBar。_qt侧面工具栏

Microsoft Office LTSC 2021企业办公新标杆,稳定高效助力业务发展-程序员宅基地

文章浏览阅读267次,点赞4次,收藏10次。总的来说,Office套件的功能特色在于其强大的文档处理、数据分析、演示制作和邮件管理等功能,以及各应用程序之间的协同工作,能够极大地提高用户的工作效率。除了上述三个主要应用程序外,Office套件还包括其他应用程序,如Outlook、OneNote、Publisher和Access等,每个应用程序都有其独特的功能特色,满足用户在不同场景下的办公需求。Office是一款功能强大的办公软件套件,包含了多个应用程序,每个应用程序都有其独特的功能特色。

Elasticsearch--解决JVM 堆内存使用率很高的问题_elasticsearch8占用大量内存-程序员宅基地

文章浏览阅读2k次,点赞22次,收藏16次。本文介绍如何解决ES的JVM 堆内存使用率飙升的问题。_elasticsearch8占用大量内存

《Selenium 2 自动化测试实战》读书笔记_selenium2自动化测试实战-程序员宅基地

文章浏览阅读136次。最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试 & 自动化测试的理论知识,遂拿过来学习学习。所以本文几乎没有实践内容,大多都是概念和工具的 mark,后续若有实践,我会来补充的。_selenium2自动化测试实战

树莓派4B 与 stm32 通信_树莓派4b 与 stm32 采用usb-ttl通信-程序员宅基地

文章浏览阅读1.7w次,点赞33次,收藏486次。本文用来记录智能控制课设中的通信环节的实现硬件便是树莓派4Bstm32(我用的是正点原子的STM32F103ZET6的核心板)从头开始做的,带着你去从烧录树莓派,安装STM32的编译环境开始,直到二者成功通信。如何使用串口助手进行调试,以及如何通过代码进行通信。1.准备环节(树莓派已经烧录好镜像可以正常使用,stm32也已经装好keil5的同学可以略过)1.1 树莓派新买的树莓派4B一般TF卡没有烧入镜像(也就是树莓派的操作系统)官方推荐系统是以下三种32位Lite版(无桌面)32位桌面版_树莓派4b 与 stm32 采用usb-ttl通信

Ubuntu系统下JDK环境切换_ubuntu切换jdk-程序员宅基地

文章浏览阅读251次。请注意,如果系统上没有安装Java,你将看到一个类似"command not found"的错误信息,这意味着你需要先安装Java。如果你需要切换到一个新的Java版本,首先需要安装该版本。这将列出系统中已安装的Java版本,并要求你选择默认的Java版本。完成上述步骤后,你已经成功安装并配置了新的Java版本。如果需要切换回先前的Java版本或者安装其他版本,重复步骤2和步骤3即可。首先,我们需要检查系统上已安装的Java版本。接下来,需要配置系统使用新安装的Java版本。_ubuntu切换jdk