sql

SQL study - day 1. RANK 함수

jyuuni 2023. 3. 23. 21:31
반응형

Q. 미국 영화 중에서 showing_count와 audience_num의 합계가 높은 상위 50개 영화 데이터를 추출하세요. 

select seq_no, ranks, movie_name, countries as country 
from box_office 
where countries = '미국' 
order by showing_count+audience_num DESC 
limit 50;

 

- 합계가 높은 순으로 ranks 할당하기 - rank() over(order by ___ ) 사용하기

select seq_no, rank() over(order by showing_count+audience_num DESC) ranks, movie_name, countries 
from box_office 
where countries = '미국'
limit 50;

showing_count와 audience_num의 합이 높은 순서대로 순위 할당

 

 

순위 함수?

1. rank : 순위를 매기면서 같은 순위가 존재하면 존재하는 수만큼 다음 순위를 건너뛴다   ex. 1,2,2,4,5,6,7

2. dense_rank : 같은 순위가 존재하더라도 다음 순위를 건너뛰지 않고 이어서 매긴다       ex. 1,2,2,3,4,5,6

3. row_number : 순위를 매기면서 동일한 값이라도 각기 다른 순위를 부여한다                  ex. 1,2,3,4,5,6,7

 

 

Q. 나라별로 sale_amount가 최대인 영화 데이터 추출하기

1. 나라별 sale_amount 최대값 열 추가하기

select movie_name,
       countries,
       sale_amt, 
       max(sale_amt) over(partition by countries) max_amount
from box_office

나라별로 하나의 영화가 나오는 것이 아니라 포함된 모든 데이터가 뽑히게 된다.

 

2. sale_amount = max(sale_amt) 인 데이터만 추출하기

select movie_name, countries, sale_amt
from(
   select movie_name, 
    	countries, 
        sale_amt, 
        max(sale_amt) over(partition by countries) as max_amount 
   from box_office) as sub 
where sale_amt = max_amount;

같은 countries 별로 sale_amt가 최대인 데이터만 추출

반응형