브랜드별, 어느 국가에서 잘 팔리는지 매출 순으로 상위 국가 10개씩 추출하기
아래와 표와 같은 형식으로 데이터를 뽑아보자
JOIN 2번 하고
서브쿼리 쓰고
ROW_NUMBER() OVER (PARTITION BY _ ORDER BY _) 함수를 사용했다.
SELECT
it_brand
,od_b_country
,od_price
FROM
(
SELECT
it.it_brand
,od.od_b_country
,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"
,ROW_NUMBER() OVER (PARTITION BY it_brand ORDER BY od_price DESC) as o_rn
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, od.od_b_country
) as subquery1
WHERE o_rn < 11
AND it_brand in('nice','adddis','nature') -- 원하는 브랜드 입력
우선 subquery1 의 결과는 아래와 같다
브랜드별, 국가별, 판매 수량, 판매금액, o_rn
ROW_NUMBER() OVER () 함수의 결과로 o_rn 이 생겼다.
이렇게 생성된 subquery1 테이블에서 아래와 같이 SELECT를 하면 최종 결과가 나온다.
SELECT
it_brand, od_b_country, od_price
FROM subquery1
WHERE o_rn < 11
AND it_brand in (' ' , ' ', ' ' , ' '...)
브랜드별 매출 국가 순위 TOP 10 을 볼때는 아래와 같이
WHERE o_rn < 11 이렇게 조건을 줘서
o_rn 이 1부터 10 까지 인 컬럼만 골랐는데
브랜드별 매출 국가 순위 TOP 5 를 보고 싶다면
아래와 같이 o_rn 을 수정해 주면 된다.
SELECT
it_brand, od_b_country, od_price
FROM subquery2
WHERE o_rn < 6
AND it_brand in (' ' , ' ', ' ' , ' '...)
*참고 : 이 글은 AWS Redshift PL/pgSQL 사용한 쿼리문 입니다
'IT > SQL' 카테고리의 다른 글
[SQL 예문] SQL 연습하기 1 (기초 쿼리문) (0) | 2022.03.24 |
---|---|
[SQL 예문] 상품등록 후 최초 30일간 판매 데이터 (반응 좋은 신제품 알아보기) (0) | 2022.03.21 |
[SQL 예문] 브랜드별 판매수량, 금액 구하기 (feat. JOIN) (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 |
댓글