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

Ответы (0 шт):