mysql留存率除了存储过程_SQL 编程|如何计算客户留存率?

在电商行业,老板或运营同学经常需要看客户活跃,留存,流失情况。今天,就重点聊一下【如何计算客户的留存率?】

留存即客户在完成第一次交易后,在后续的日子里,是否持续的上来交易。如果按月为单位,则就是客户首次成交后,后续月份的成交比例。

被观察客户群:某月份首次成交客户 。后续的留存率都是基于这些客户来计算的。

月度留存率算法公式:

月度留存率 = 某月份中被观察客户中成交客户数 / 被观察月份的总成交客户数

举个例子:

假设2020年1月份,A B C D 四位客户首次成交;2月份 A B 成交;3月份 D成交,4月份B C D有成交。求 1月份客户在后续2,3,4月份的留存率分别是多少?

根据前面的算法公式,则:

2月份的留存率 = 2 /4 =50%

3月份的留存率 = 1/4 =25%

4月份的留存率 = 3/4 =75%

了解了计算方法后,下面介绍一下sql的写法。

用SQL代码计算各月新客的留存率

第一步,先计算各月的新客都有哪些客户

假设有交易订单表 orders,则准备好新客户表和月度成交表:

var 月新客户 = select `月份`,`客户id` from `订单表` where `是否新客`='是新客' and `成交`=1

第二步,计算出来各月成交的客户id

var 月度成交=select `月份`,`客户id` from `订单表`

where `成交`=1

group by `月份`,`客户id`

1月客户的后续月份留存率:

temp t202001_0= select 202001 as mm, count(`客户id`) as tn from `月新客` where `月份`=202001

temp t202001_1= select 202001 as mm, b.`月份`,count(b.`客户id`) as leftnum

from `月新客户` a

inner join `月度成交` b on a.`月份`=202001 and a.`客户id`=b.`客户id`

where a.`月份`=202001

group by mm, b.`月份`

temp t202001_2= select a.mm as `新客月份`, date_format(a.`月份`,'y-MM')as `月份`, a.leftnum/ b.tn as `留存率` from t20`001_1 a left join t20`001_0 b on a.mm=b.mm

output t202001_2

如果你的平台系统支持函数或存储过程,则可以把这部分代码写成函数,入口参数就是指定月份,出口结果就是这个月份的新客在后续月份的留存率数据表。

如果你的系统不支持函数或存储过程,则可以复制这部分代码成后续个月代码。最后用union all 关联起来即可。

形如:

select `新客月份`,`月份`,`留存率` from `1月新客留存率` union all

select `新客月份`,`月份`,`留存率` from `2月新客留存率`

在不同的平台系统下,SQL语法不同,请自行修改。

c2ea0f32b3c936cb9daa211013af6c63.png

我是程序员黑洞,涉猎数据分析,程序开发,目前也在学Go语言开发。欢迎关注,留言。

7cad28c7fc43a23b29f63ea33e48d2f4.png

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值