复购率 mysql 实例(sample database classicmodels _No.1)
# 复购率 mysql 实例
准备工作,可以去下载 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(*) 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%
# 总结
很多行业对复购率还是比较看重的,是一个重要的指标 。比如互联网,比如医美,比如快消等。希望对大家有帮助,有不足之处也请指出。
- 点赞
- 收藏
- 关注作者
评论(0)