IT/SQL
[SQL 예문] 브랜드별 판매수량, 금액 구하기 (feat. JOIN)
marketinkerbell
2022. 3. 18. 21:49
반응형
우리 회사 DB 구조 상, 브랜드별 판매수량, 금액을 추출하기 위해서는
세 테이블을 조인 해야한다.
ITEM 테이블 , CART 테이블, ORDER 테이블
왜 이렇게 세개가 필요하냐면,
CART 와 ORDER 테이블엔 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 로 작성)
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