SQL/SQL Grammar
[자동차 매출 데이터] 매출 top 5 국가와 매출 (서브쿼리)
ISLA!
2023. 10. 5. 13:26
본 포스팅은 아래 도서의 내용을 스터디, 참고했습니다.
최종 쿼리와 결과
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