DATA ANALYSIS/실습

[SQL] 클래식 리텐션(classic retention) 분석

쏘니(SSony) 2023. 1. 13. 18:54

solvesql 플레이그라운드에서 제공하는 US E-commerce Records 2020 데이터를 사용했다.

solvesql - 플레이그라운드

 

solvesql - 플레이그라운드

플레이그라운드 다양한 데이터에 자유롭게 SQL을 적용해보며 데이터 분석 역량을 키워보세요.

solvesql.com

 

-- 전처리한 TABLE은 WITH로 처리 후 저장
WITH records_preprocessed AS(
  SELECT r.customer_id
        , r.order_id
        , r.order_date
        , c.first_order_date
        , DATE_FORMAT(r.order_date, '%Y-%m-01') AS order_month
        , DATE_FORMAT(c.first_order_date, '%Y-%m-01') AS first_order_month
  FROM records AS r
      INNER JOIN customer_stats AS c ON r.customer_id = c.customer_id
      )

-- month0 : 각 월 별로 첫 구매한 고객이 몇 명인지 계산
-- month1 : 첫 주문 한 달 다음 달에도 이탈하지 않은 사용자의 수
SELECT first_order_month
      , COUNT(DISTINCT customer_id) AS month0
      , COUNT(DISTINCT CASE WHEN DATE_ADD(first_order_month, INTERVAL 1 month) = order_month THEN customer_id END) AS month1
      , COUNT(DISTINCT CASE WHEN DATE_ADD(first_order_month, INTERVAL 2 month) = order_month THEN customer_id END) AS month2
FROM records_preprocessed
GROUP BY first_order_month

SQL은 반복문은 없음..

노가다로 열 구해야함

 

< 정리할 쿼리 >

* WITH ~ AS

* CASE WHEN ~ THEN ~ END

* DATE_ADD (MYSQL문법임)