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、创建表格(以临时表格为例)
2、查看原始表格
3、查看每个顾客对应的购买频次Frequency
注意:查看购买频次可以对具体的下单时间进行COUNT聚合。上述创建的临时表格在同意而顾客在date上可能存在重复。但在实际的数据库中,每笔订单都会有具体的时间区分或者通过订单的代码进行区分,具体还要视情况而定。因此,这里大家可以稍微思考一下。
4、按照要求对Fre进行分组(F1,F2+)
注:在CRM系统中,我们较关注一次客和复购客的购买情况,因此将Fre分成1和2+即可。其次对两个分组的人进行分组聚合,查看一次客和复购客对应的顾客数量。 完整代码如下:
SELECT * FROM r;
DROP TABLE IF EXISTS temp_LD;
CREATE TEMPORARY TABLE temp_LD AS
SELECT cus,COUNT(DISTINCT date) AS Fre FROM r
GROUP BY cus;
SELECT * FROM temp_LD;
DROP TABLE IF EXISTS temp_Fre;
CREATE TEMPORARY TABLE temp_Fre AS
SELECT 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_Fre
GROUP BY Fre_Group;
|