본문 바로가기
IT/SQL

[SQL예문] 신규주문 / 재주문 회원수 구하기 (ft. CASE WHEN , 서브쿼리)

by marketinkerbell 2022. 3. 3.
반응형

 

 

 

주문 테이블에서

일정 기간 동안 

신규주문 회원수재주문 회원수를 구하고 싶다. 

 

 

신규주문과 재주문 구분은

해당 아이디의 주문 횟수가 1이면 신규주문

해당 아이디의 주문 횟수가 1초과 이면 재주문 으로 구분한다. 

 

 

CASE WHEN 구문 

CASE
    WHEN COUNT(mb_id) = 1 THEN '신규주문'
    WHEN COUNT(mb_id) > 1 THEN '재주문'
    ELSE '-'
END

이 CASE WHEN 구문을 SELECT 문에 하나의 칼럼으로 넣을 것이다.

 

 

 

 

우선 회원아이디로 group by 해서 회원별 주문횟수, 주문총금액을 구한다. 

IN ( ) 함수 사용법은 <- 이 글에서 6번

SELECT mb_id, 
    SUM(od_receipt_price) AS 주문총금액,
    COUNT(mb_id) AS 주문횟수
FROM shop_order
WHERE od_time BETWEEN '2022-01-01 00:00:00' AND '2022-01-31 23:59:59' 
      AND od_status IN ('입금','준비','배송','완료')     
GROUP BY mb_id

 

 

 

 

그런다음 '주문횟수' 칼럼이 1인지,  1초과인지에 따라 

신규주문인지 재주문인지 주문유형을 분류해 준다. 

( CASE WHEN 구문 )

 

SELECT mb_id, 
    SUM(od_receipt_price) AS 주문총금액,
    COUNT(mb_id) AS 주문횟수,
    
(CASE
    WHEN COUNT(mb_id) = 1 THEN '신규주문'
    WHEN COUNT(mb_id) > 1 THEN '재주문'
    ELSE '-'
END) AS 주문유형

FROM shop_order
WHERE od_time BETWEEN '2022-01-01 00:00:00' AND '2022-01-31 23:59:59' 
AND od_status IN ('입금','준비','배송','완료')     
GROUP BY mb_id

 

 

 

여기까지 작성한 쿼리문을 서브쿼리로 사용해서 

 

재주문 회원수와

신규주문 회원수를 

간단하게 출력해보겠다. 

 

SELECT 주문유형, COUNT(주문유형) AS count
FROM 
(
SELECT mb_id, 
    SUM(od_receipt_price) AS 주문총금액,
    COUNT(mb_id) AS 주문횟수,
    
(CASE
    WHEN COUNT(mb_id) = 1 THEN '신규주문'
    WHEN COUNT(mb_id) > 1 THEN '재주문'
    ELSE '-'
END) AS 주문유형

FROM shop_order
WHERE od_time BETWEEN '2022-01-01 00:00:00' AND '2022-01-31 23:59:59' 
  AND od_status IN ('입금','준비','배송','완료')     
GROUP BY mb_id
) AS subquery

GROUP BY 주문유형

 

 

 

 

결과 2줄 얻기위한 대략 20줄의 쿼리문 ㅎㅎ 

 

 

 

( *참고 : 캡쳐화면은 AWS Redshift 화면이며 postgreSQL 기반입니다. )

 

 

 

 

일별 신규주문/재주문 수를 구하고 싶다면

-> https://devfairy.tistory.com/121 

 

 

 

 

 

 

 

 

댓글