复购率 mysql 实例(sample database classicmodels _No.1 )

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 复购率 mysql 实例(sample database classicmodels _No.1 )

复购率 mysql 实例

准备工作,可以去下载 classicmodels 数据库具体如下

点击:classicmodels

用的是 MySQL 8.0


前言


什么是复购率?,以下是百度百科查的结果


复购率有叫 重复购买率, 大家也可以去百度百科查 重复购买率的定义。


指消费者对该品牌产品或者服务的重复购买次数,重复购买率越多,则反应出消费者对品牌的忠诚度就越高,反之则越低。

重复购买率有两种计算方法:

一种是所有购买过产品的顾客,以每个人人为独立单位重复购买产品的次数,比如有10个客户购买了产品,5个产生了重复购买,则重复购买率为50%;


第二种,按交易计算,即重复购买交易次数与总交易次数的比值,如某月内,一共产生了100笔交易,其中有20个人有了二次购买,这20人中的10个人又有了三次购买,则重复购买次数为30次,重复购买率为30%。


推荐企业采取第一种算法。这里就介绍第一种

一、数据准备

select * FROM  classicmodels.orders


二、复购率计算步骤

1.窗口函数计算首次购买日期

代码如下(示例):

SELECT customerNumber, -- 客户编号
DATE(orderDate)  as order_date, -- 购买日期
min(DATE(orderDate)) OVER (PARTITION BY customerNumber) AS first_orderdate  -- 首次购买日期
FROM  classicmodels.orders


2.第2次购买间隔天数,月份数

代码如下(示例),这个就可以看到date_diff不是0的都是复购的订单:

select DISTINCT customerNumber as'user_id' , -- 客户编号
order_date , -- 购买日期 
first_orderdate , -- 首次购买日期
DATEDIFF(order_date, first_orderdate) date_diff ,  -- 首购后,再次购买间隔天数 
(year(order_date)-year(first_orderdate))*12+ (month(order_date)-month(first_orderdate)) month_diff -- 首购后,再次购买间隔月份数
          from (
SELECT customerNumber, -- 客户编号
DATE(orderDate)  as order_date, -- 购买日期
min(DATE(orderDate)) OVER (PARTITION BY customerNumber) AS first_orderdate  -- 首次购买日期
FROM  classicmodels.orders
          ) a 


3.每个客户编号的复购次数

select user_id,count(user_id) from (

select DISTINCT customerNumber as'user_id' , -- 客户编号
 order_date , -- 购买日期 
first_orderdate , -- 首次购买日期
DATEDIFF(order_date, first_orderdate) date_diff ,  -- 首购后,再次购买间隔天数 
(year(order_date)-year(first_orderdate))*12+ (month(order_date)-month(first_orderdate)) month_diff -- 首购后,再次购买间隔月份数
from (
SELECT customerNumber, -- 客户编号
DATE(orderDate)  as order_date, -- 购买日期
min(DATE(orderDate)) OVER (PARTITION BY customerNumber) AS first_orderdate  -- 首次购买日期
FROM  classicmodels.orders
) a   where  DATEDIFF(order_date, first_orderdate)>0
) b group by user_id order by count(*)


4.复购次数汇总

说明下这里统计周期比较长是按照 2003-01-06~2005-05-31 时间统计
具体可以根据按时间统计
select 
count(if(复购次数=1,user_id,null)) as '复购次数1次客户人数',
count(if(复购次数=2,user_id,null)) as '复购次数2次客户人数',
count(if(复购次数=3,user_id,null)) as '复购次数3次客户人数',
count(if(复购次数=4,user_id,null)) as '复购次数4次客户人数',
count(if(复购次数>4,user_id,null)) as '复购次数大于4次客户人数'

from 
(
select user_id,count(user_id) as '复购次数' from (
          select DISTINCT customerNumber as'user_id' , -- 客户编号
          order_date , -- 购买日期 
          first_orderdate , -- 首次购买日期
           DATEDIFF(order_date, first_orderdate) date_diff ,  -- 首购后,再次购买间隔天数 
           (year(order_date)-year(first_orderdate))*12+ (month(order_date)-month(first_orderdate)) month_diff -- 首购后,再次购买间隔月份数
from (
SELECT customerNumber, -- 客户编号
DATE(orderDate)  as order_date, -- 购买日期
min(DATE(orderDate)) OVER (PARTITION BY customerNumber) AS first_orderdate  -- 首次购买日期
FROM  classicmodels.orders
          ) a   where  DATEDIFF(order_date, first_orderdate)!=0
          ) b
group by user_id 
) c


最后方便大家理解

select count(distinct customerNumber) FROM classicmodels.orders 有 98人

有复购行为的 有 97 人 .

有一个人在2003-01-06~2005-05-31 之间只买了一次没有复购

所以如果按这个时间段算(2003-01-06~2005-05-31 ) 复购率是 97/98=98%

总结

很多行业对复购率还是比较看重的,是一个重要的指标 。比如互联网,比如医美,比如快消等。希望对大家有帮助,有不足之处也请指出。



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
关系型数据库 MySQL 数据库
mysql 8.0 递归(例子分享)(sample database classicmodels _No.4)
本文介绍了如何在MySQL8.0中使用递归查询处理部门表和员工表的树形结构数据,包括查看文档、准备数据、递归处理以及提取层级信息。作者通过示例展示了WITHRECURSIVE语句的应用及其在数仓中的结构表示。
6 2
|
1天前
|
SQL 数据库
数据审计 -本福德定律 Benford‘s law (sample database classicmodels _No.6)
数据审计 -本福德定律 Benford‘s law (sample database classicmodels _No.6)
6 1
|
1天前
|
安全 关系型数据库 MySQL
mysql8.0 正值表达式Regular expressions (sample database classicmodels _No.5)
本文介绍了MySQL8.0中的正值表达式及其相关函数,通过实例展示了如何使用正则表达式进行字符串匹配,并提出了关于执行效率的问题。
9 1
|
1天前
|
SQL 前端开发 关系型数据库
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
5 0
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
|
1天前
|
SQL 关系型数据库 MySQL
介绍5款 世界范围内比较广的 5款 mysql Database Management Tool
介绍5款 世界范围内比较广的 5款 mysql Database Management Tool
7 0
|
1天前
|
SQL Oracle 关系型数据库
窗口函数(sample database classicmodels _No.8 )
本文介绍了SQL中的窗口函数,包括其概念、语法以及在实例中的应用。重点讲解了如何使用窗口函数进行聚合、排序和分析操作,特别提到了MySQL中常见的四个窗口函数:DENSE_RANK(),RANK(),ROW_NUMBER(),LAG()。
7 0
|
1天前
|
存储 Oracle 数据建模
大工程 从0到1 数据治理 之数据模型和设计篇(sample database classicmodels _No.7)
大工程 从0到1 数据治理 之数据模型和设计篇(sample database classicmodels _No.7)
4 0
|
1天前
|
存储 SQL NoSQL
大工程 从0到1 数据治理 数仓篇(sample database classicmodels _No.7)
大工程 从0到1 数据治理 数仓篇(sample database classicmodels _No.7)
4 0
|
1天前
|
存储 关系型数据库 MySQL
Key_Value 形式 存储_5级省市城乡划分代码 (mysql 8.0 实例)
本文介绍了如何使用MySQL8.0数据库中的Key_Value形式存储全国统计用区划代码和城乡划分代码(5级),包括导入数据、通过数学函数提取省市区信息,以及查询5级行政区划的详细数据。
3 0
|
5月前
|
SQL Oracle 关系型数据库
WARNING: Too Many Parse Errors With error=911 When Running a JDBC Application Connected to an Oracle 19c database
WARNING: Too Many Parse Errors With error=911 When Running a JDBC Application Connected to an Oracle 19c database (
84 2