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

举报
小Tomkk 发表于 2024/02/27 22:01:20 2024/02/27
【摘要】 复购率 mysql 实例

# 复购率 mysql 实例
准备工作,可以去下载 classicmodels 数据库具体如下 

[ 点击:classicmodels官网下载]

[也可以去CSDN 去免费资源下载]


 
 用的是 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(*) desc



## 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% 


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

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。