> 文档中心 > SQL 使用CASE WHEN实现RFM参数—F(Frequency)

SQL 使用CASE WHEN实现RFM参数—F(Frequency)


SQL 使用CASE WHEN实现RFM参数—F(Frequency)

前言:

博主目前从事的是BA数据分析师、在实际工作中需要问其他部门的同事提供SQL需求,在最近的工作中大量用到SQL搭建RFM模型的案例,其中分别涉及到参数R,F和M的参数实现。因此,以我实际工作遇到的问题进行总结。

参数F的概念:

F值:客户在最近一段时间内交易次数。(Frequency)
基于交易频率次数,交易频率越高,所对应的客户价值就越高。反映客户交易活跃度。

使用SQL实现F值
案例如下:
2022年5月1日,某电商平台进行了一次促销活动,需要查看在历史所有时间段顾客购买频次情况,即不同F的人数分布。F值如下:
1、F1
2、F2+

1、创建表格(以临时表格为例)

SQL 使用CASE WHEN实现RFM参数—F(Frequency)

2、查看原始表格

SQL 使用CASE WHEN实现RFM参数—F(Frequency)

3、查看每个顾客对应的购买频次Frequency

SQL 使用CASE WHEN实现RFM参数—F(Frequency)
注意:查看购买频次可以对具体的下单时间进行COUNT聚合。上述创建的临时表格在同意而顾客在date上可能存在重复。但在实际的数据库中,每笔订单都会有具体的时间区分或者通过订单的代码进行区分,具体还要视情况而定。因此,这里大家可以稍微思考一下。

4、按照要求对Fre进行分组(F1,F2+)

SQL 使用CASE WHEN实现RFM参数—F(Frequency)
注:在CRM系统中,我们较关注一次客和复购客的购买情况,因此将Fre分成1和2+即可。其次对两个分组的人进行分组聚合,查看一次客和复购客对应的顾客数量。
完整代码如下:

SELECT * FROM r;DROP TABLE IF EXISTS temp_LD;CREATE TEMPORARY TABLE temp_LD ASSELECT cus,COUNT(DISTINCT date) AS Fre FROM rGROUP BY cus;SELECT * FROM temp_LD;DROP TABLE IF EXISTS temp_Fre;CREATE TEMPORARY TABLE temp_Fre ASSELECT Fre,CASE WHEN FRE=1 THEN '1' WHEN FRE>1 THEN '2+' END AS Fre_Group FROM temp_LD;SELECT Fre_Group,COUNT(DISTINCT Fre) AS cus_num FROM temp_FreGROUP BY Fre_Group;