본문 바로가기
IT/SQL

[SQL 예문] 브랜드별 판매수량, 금액 구하기 (feat. JOIN)

by marketinkerbell 2022. 3. 18.
반응형

 

 

 

우리 회사 DB 구조 상, 브랜드별 판매수량, 금액을 추출하기 위해서는

세 테이블을 조인 해야한다. 

 

ITEM 테이블 , CART 테이블,  ORDER 테이블 

 

 

왜 이렇게 세개가 필요하냐면, 

 

 

 

CARTORDER 테이블엔 BRAND 명 칼럼이 없음

 

ORDER 테이블엔 주문번호별 총주문금액은 있어도 

한 주문번호 안에 어떤 상품들을 담았는지는 없음 

그건 CART테이블에 데이터 존재

 

 

 

ITEM 테이블에 BRAND 명 칼럼 존재.

CART 테이블에 상품별 판매수량, 금액 칼럼 존재 

ORDER 테이블에 주문번호 (od_id), 결제일시 (od_receipt_time) 칼럼 존재

 

 

 

우선 ORDER 테이블과 CART 테이블을  주문번호 (od_id) 를 key 로 해서 JOIN 한다. 

이렇게 JOIN 한 결과와 ITEM 테이블을 상품코드 (product_code)를 key 로 해서 JOIN 한다. 

 

 

 

 

SELECT *

FROM shop_order AS od JOIN shop_cart AS ct
ON od.od_id=ct.od_id 

LEFT JOIN shop_item AS it 
ON ct.s2_product_code=it.s2_product_code

 

 

 

JOIN 한 후 

 

브랜드별 판매수량과 판매금액을 보기위한 쿼리문을 아래와 같이 작성한다. 

 

 

(AWS Redshift  PL/pgSQL 로 작성)

TO_CHAR 사용법

 

 

 

 

SELECT 
it.it_brand, 
TO_CHAR (SUM(ct.ct_qty) , '999,999,999') AS "od_qty" , 
TO_CHAR (SUM(ct.ct_price * ct.ct_qty), '999,999,999.99' ) AS "od_price" 

FROM shop_order AS od JOIN shop_cart AS ct
ON od.od_id=ct.od_id 

left JOIN shop_item AS it 
ON ct.s2_product_code=it.s2_product_code   

WHERE it.it_brand != '' 
AND left(od.od_receipt_time, 10) BETWEEN '2022-01-01' AND '2022-02-28'  -- 결제일시
AND ct.ct_status IN ('완료','입금','배송','준비') 

GROUP BY it.it_brand
ORDER BY od_price DESC 
LIMIT 50

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글