반응형
우리 회사 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
'IT > SQL' 카테고리의 다른 글
[SQL 예문] 상품등록 후 최초 30일간 판매 데이터 (반응 좋은 신제품 알아보기) (0) | 2022.03.21 |
---|---|
[SQL 예문] 브랜드별 매출 국가 순위 TOP 10 (ft. 서브쿼리, Round_number() Over () ) (0) | 2022.03.18 |
[SQL 함수] RANK() OVER (Partition by _ Order by _ ) (0) | 2022.03.14 |
[SQL 함수] ROW_NUMBER() OVER (Partition by _ Order by _ ) (2) | 2022.03.11 |
[AWS Redshift SQL] DATEDIFF 함수 _ 날짜 차이 구하기 (0) | 2022.03.08 |
댓글