반응형
주문 테이블에서
일정 기간 동안
신규주문 회원수와 재주문 회원수를 구하고 싶다.
신규주문과 재주문 구분은
해당 아이디의 주문 횟수가 1이면 신규주문
해당 아이디의 주문 횟수가 1초과 이면 재주문 으로 구분한다.
CASE WHEN 구문
CASE
WHEN COUNT(mb_id) = 1 THEN '신규주문'
WHEN COUNT(mb_id) > 1 THEN '재주문'
ELSE '-'
END
이 CASE WHEN 구문을 SELECT 문에 하나의 칼럼으로 넣을 것이다.
우선 회원아이디로 group by 해서 회원별 주문횟수, 주문총금액을 구한다.
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
'IT > SQL' 카테고리의 다른 글
[AWS Redshift SQL] 숫자 세 자리 마다 콤마(,) 찍기 / 소수점 자릿수 맞추기 (ft. TO_CHAR) (0) | 2022.03.07 |
---|---|
[AWS] Redshift 는 PostgreSQL을 기반으로 한다 (0) | 2022.03.04 |
[SQL예문] 월별 / 일별 주문 수 추출하기 (feat. SUBSTRING) (0) | 2022.02.25 |
[MySQL] ALTER TABLE (ADD, DROP, RENAME,MODIFY) (0) | 2022.02.03 |
[MySQL] 테이블 컬럼 정보 보기 DESCRIBE (DESC) (0) | 2022.02.03 |
댓글