본문 바로가기
SQL/SQL Grammar

[자동차 매출 데이터] 매출 top 5 국가와 매출 (서브쿼리)

by ISLA! 2023. 10. 5.

본 포스팅은 아래 도서의 내용을 스터디, 참고했습니다.

 

최종 쿼리와 결과

select *
from(
	select country, sales, dense_rank() over (order by sales desc) as sales_rank
	from (
		select country
				, sum(priceEach * quantityordered) as sales
		from orders as a
		left join customers as b on b.customerNumber = a.customerNumber
		left join orderdetails as c on a.ordernumber = c.ordernumber
		group by 1
	) a
) b
where sales_rank <= 5;

 

 

1단계 : 원하는 데이터 도출을 위해 필요한 데이터셋 찾아 합치기

  • 여기서는 orders, customers, orderdetails 의  세 개 데이터를 불러왔다

 

 

2단계 : 국가별  총 매출을 계산하는 쿼리 작성 

  • 아래 노란색 표시 부분으로, group by 와 sum()을 이용하여 국가별 매출액을 도출한다

 

 

 

3단계 : 매출액을 기준으로 rank 를 도출하기 위해 서브쿼리 이용

  • 2단계에서 정리한 데이터의 country, sales 를 기반으로 sales_rank를 만든다.
  • 이때 dense_rank()를 사용한다.

 

4단계 : 5순위까지 뽑기 위해 서브쿼리 이용

  • 3단계에서 정리한 sales_rank가 5 이하인 것만 보기 위해 where 절을 써야 한다.
  • where 절에 들어올 수 있는 컬럼은 from 절에 위치한 테이블에서만 조건을 걸 수 있으므로 이를 다시 서브쿼리로 작성해준다.
  • select 절에서 생성한 컬럼은 where 절에 들어올 수 없다

 

참고로, 서브쿼리를 From 이나 Join에 쓸 때는 쿼리의 마지막(괄호 끝)에 꼭 문자를 입력해주어야 한다.

728x90