SQL-запрос для RFM-анализа с сегментацией пользователей
У меня есть таблица с user_id, order_id, датой и суммой заказа.
Я написал запрос, который делит всех пользователей на квартили с помощью функции NTILE, а затем мне нужно распределить полученные квартили на сегменты.
Верхняя часть кода работает, нижняя - это сегментация, которую я хотел бы реализовать, но, к сожалению, мне не удается объединить оба кода.
WITH rfm_raw AS (
SELECT
user_id,
DATE_DIFF(CURRENT_DATE(),MAX(created_at), DAY) AS R,
COUNT(*) AS F,
AVG(SUM) AS M
FROM `TABLE`
GROUP BY user_id
),
calc_r AS (
SELECT
user_id,
R,
NTILE(4) OVER (ORDER BY R ASC) R_S
FROM rfm_raw),
calc_f AS (
SELECT user_id,
F,
NTILE(4) OVER (ORDER BY F DESC) F_S
FROM rfm_raw),
calc_m AS (
SELECT user_id,
M,
NTILE(4) OVER (ORDER BY M DESC) M_S
FROM rfm_raw)
SELECT
calc_r.user_id,
R,
R_S,
F,
F_S,
M,
M_S
FROM calc_r
LEFT JOIN calc_f
ON calc_r.user_id = calc_f.user_id
LEFT JOIN calc_m
ON calc_r.user_id = calc_m.user_id
CASE
WHEN (R_S = 4) AND (F_S =4 ) AND ( M_S = 4)
THEN 'Champions'
WHEN (R_S BETWEEN 3 AND 4) AND (F_S BETWEEN 3 AND 4 ) AND ( M_S BETWEEN 2 AND 4)
THEN 'Loyal Customers'
WHEN (R_S BETWEEN 3 AND 4) AND (F_S BETWEEN 1 AND 4) AND ( M_S BETWEEN 1 AND 4)
THEN 'Potential Loyalists'
WHEN (R_S = 4) AND (F_S =1 ) AND ( M_S =1)
THEN 'New Customers'
WHEN (R_S = 3) AND (F_S BETWEEN 1 AND 3) AND ( M_S BETWEEN 1 AND 3)
THEN 'Promising'
WHEN (R_S BETWEEN 2 AND 3) AND (F_S BETWEEN 1 AND 4 ) AND ( M_S BETWEEN 1 AND 4)
THEN 'Need Attention'
WHEN (R_S=2) AND (F_S =1 ) AND ( M_S =2)
THEN 'About to sleep'
WHEN (R_S <=2) AND (F_S BETWEEN 1 AND 4 ) AND ( M_S BETWEEN 1 AND 4 )
THEN 'At risk'
WHEN (R_S <=2) AND (F_S BETWEEN 3 AND 4) AND ( M_S BETWEEN 2 AND 4)
THEN 'Cannot lose them '
WHEN (R_S =1) AND (F_S =4 ) AND ( M_S =1)
THEN 'Hibernating'
WHEN (R_S =1) AND (F_S =1 ) AND ( M_S =1)
THEN 'Lost'
END AS rfm_segment