RFM: 고객군을 세분화 방법 중 하나
보통 CRM 마케팅을 할 때 많이 사용한다.
고객 세분화를 몇 단계로 나눌 것인지, 어떤 기준으로 나눌 것인지는 정해진 것이 없으며 상황에 맞게 기준을 세우면 된다.
예를 들어 최근의 범주를 어떻게 잡을 것인지도 논의 대상이 될 수 있다. (1일, 1주, 1년 등)
Recency: 얼마나 최근에 구매했는지
Frequency: 얼마나 자주 구매했는지
Monetary: 얼마나 많은 금액을 구매했는지
CASE와 IF
CASE는 조건을 여러개 넣을 수 있지만
IF는 조건을 하나만 넣을 수 있다. if중첩은 x
WHERE 절은??
1) recency
SELECT last_order_date
,CASE WHEN last_order_date >= '2020-12-01' THEN 1 else 0 end AS Recency, last_order_date
FROM customer_stats
2) frequency
SELECT cnt_orders
, IF(cnt_orders >= 3, 1, 0) AS Frequency
FROM customer_stats
3) monetary
문제
Q. customer_stats 테이블의 last_order_date 컬럼을 이용하여 각 고객의 Recency 점수를 계산해봅시다. Recency 점수가 1점인 사용자, 0점인 사용자는 각각 몇 명인가요? 조건 계산에는 CASE를 사용해주세요.
SELECT CASE WHEN last_order_date >= '2020-12-01' THEN 1 else 0 end AS Recency, count(*)
FROM customer_stats
GROUP BY Recency
문제
Q. customer_stats 테이블의 last_order_date, cnt_orders 컬럼을 이용하여 각 고객의 Recency, Frequency 점수를 계산해봅시다. 아래 표를 채워넣어주세요. 조건 계산에는 IF를 사용해주세요.
SELECT CASE WHEN last_order_date >= '2020-12-01' THEN 1 else 0 end AS Recency
,if(cnt_orders < "3", 0, 1) AS Frequency
, count(*)
FROM customer_stats
GROUP BY Recency, Frequency
ORDER BY Recency DESC, Frequency DESC
solvesql - RFM 분석 2단계. 고객 분류하기
SELECT CASE WHEN last_order_date >= '2020-12-01' THEN 1 else 0 end AS recency
, CASE WHEN cnt_orders < 3 THEN 0 else 1 end AS frequency
, CASE WHEN sum_sales < 500 THEN 0 else 1 end AS monetary
, count(customer_id) AS customers
FROM customer_stats
GROUP BY recency, frequency, monetary
테이블 피봇
행으로 나열(가로로 쌓였있던 데이터)되어 있던 데이터를
열 방향(세로에 컬럼을 지정해서 보여줌)으로 변환해서 좀 더 데이터를 한 눈에 보고 싶을 때 사용하는 기능
SELECT order_id, CASE WHEN (category = "Furniture") THEN order_id else null End AS furniture_order_id
FROM records
SELECT region AS Region
,count(distinct CASE WHEN category = 'Furniture' THEN order_id END) as Furniture
,count(distinct CASE WHEN category = 'Office Supplies' THEN order_id END) as "Office Supplies"
,count(distinct CASE WHEN category = 'Technology' THEN order_id END) as Technology
FROM records
GROUP BY region
ORDER BY region