技术标签: sql
来源:数据运营与数据分析
计算某日的客户在第n日再次出现的概率--用户n日留存率。
计算某日的客户在某个时间段内再次出现的概率--用户n日内留存率。
计算某日新增的用户在第n日再次出现的概率--新用户n日留存率。
计算某日新增的用户在某个时间段内再次出现的概率--新用户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;
计算某日的客户在某个时间段内再次出现的概率--用户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;
计算某日新增的用户在第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;
计算某日新增的用户在次日内、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;
(基于精通iOS开发 第七版)iOS程序的特点1:在iOS中,一次只能有一个应用处于活动状态并显示在屏幕上。从iOS 4开始, 可以专门编写代码使用户按下home键后,app可以在后台继续运行。不处于活动状态或者在后台运行时,应用程序不会占用任何CPU资源,这会严重干扰其与开放式网络的链接。iOS允许后台处理,不过要使应用程序在此状况下良好运行则需要开发者自己努力。2:只能使...
首先应该明确:*nix系统中,使用tar对文件打包时,一般不建议使用绝对路径。通常是在两台环境相似的机器上进行同步复制的时候,才有需要使用绝对路径进行打包。使用绝对路径打包时如果不指定相应的参数,tar会产生一句警告信息:”tar: Removing leading `/’ from member names”,并且实际产生的压缩包会将绝对路径转化为相对路径。比如:[email protected] ~ # t...
教程:https://www.runoob.com/java/java8-streams.html理解:对集合元素快速筛选、过滤 、收集实体集合。fiter(判断条件)。sorted(排序条件)。map(映射关系)。collect(Collectors.toList());1、filter() 判断条件形式为: 自定义的变量->自定义的变量。属性 与其他值或表达式进行潘判断 //自定义的变量 无需声明 或者说是 匿名式声明函数如:// 计算空字符串 // 计算空...
一、什么是扩展?扩展就是向一个已有的类、结构体或枚举类型添加新功能,扩展可以对一个类型添加新的功能,但是不能重写已有的功能。Swift 中的扩展可以:添加计算型属性和计算型静态属性;定义实例方法和类型方法;提供新的构造器;定义下标;定义和使用新的嵌套类型;使一个已有类型符合某个协议。扩展声明使用关键字 extension:extension SomeType { // 加到SomeType的新功能写到这里}一个扩展可以扩
作者介绍史海峰,公众号IT民工闲话作者第79篇好文:11000字 | 18分钟阅读前言我今天不讲技术,主要分享作为IT民工最近十年的职业历程,希望能给...
前言:本次小记主要分为三段。前两段相当于对源码编译的一个回顾。本次小记主要第三段,记下了编译中出现的几个问题,以便日后需要。1、编译时编译线程过多。导致编译失败。2、编译image没问题打包OTA时出现错误。一、编译环境1、硬件环境:(以下为官方建议)> 编译 Android 对机器的配置要求较高:64 位 CPU16GB 物理内存+交换内存
类似函数可以参考详细参数链接:https://docs.scipy.org/doc/numpy/reference/generated/numpy.sin.html具体操作实例在这不做讲解!#coding=utf8'''a为ndarray对象np.sin(a) 对矩阵a中每个元素取正弦x是单个数据值:np.sin(x) 对x元素取正弦np.pi:是一个常量,代表3.14159
使用poi进行导出excel时,发现导出的文件名如果是中文,会出现乱码问题,将文件名进行如下编码后即可解决:response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes("gbk"), "iso8859-1")+".xlsx");或者:response.s
在Python中定义类经常会用到__init__函数(方法)__init__的理解:1.首先需要理解的是,两个下划线开头的函数是声明该属性为私有,不能在类的外部被使用或访问。2.__init__函数(方法)支持带参数类的初始化,也可为声明该类的属性(类中的变量)。__init__函数(方法)的第一个参数必须为self,后续参数为自己定义。__init__()方法意义重大的原因有两个。第一个原因是在...
json的反序列化方式有两种:Use json.Unmarshal passing the entire response stringdata, err := ioutil.ReadAll(resp.Body)if err == nil &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; data != nil { err = json.Unmarshal(data, value)}using json...
react开发需要引入多个依赖文件,其中react.js、react-dom.js这两个文件是我们创建react应用程序必须要引入的依赖文件。react.js 是核心,提供创建元素,组件等功能https://unpkg.com/[email protected]/umd/react.development.jsreact-dom.js 提供DOM相关功能https://unpkg.com/[email protected]/umd/react-dom.development.js下载对应的react.js和re