본문 바로가기
IT/SQL

[SQL 예문] 브랜드별 매출 국가 순위 TOP 10 (ft. 서브쿼리, Round_number() Over () )

by marketinkerbell 2022. 3. 18.
반응형

 

 

 

브랜드별,  어느 국가에서 잘 팔리는지 매출 순으로 상위 국가 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 사용한 쿼리문 입니다

 

 

 

 

 

 

 

댓글