카테고리 없음

[SQL] partition by (구간 별 rank)사용하기

Demis Tae Kyu Eom 2019. 12. 4. 09:41

데이터를 추출하다가 partition by를 사용할 일이 생겨서 간단하게 정리.

부끄럽지만 처음 사용해보는 거라서  조금 헤맸다..

 

자세히 설명해둔 글들이 많이 있었는데 주로 이 글이 글을 참고했다.


ID   Name    Score    Subject
1    Joe      100      Math
2    Jim      99       Math
3    Tim      98       Math
4    Joe      99       History
5    Jim      100      History
6    Tim      89       History
7    Joe      80       Geography
8    Tim      100      Geography
9    Jim      99       Geography

위와 같은 데이터가 있을 때 각 subject별로 점수 순위 상위 2명까지 추출하고 싶은 경우에는 다음과 같은 쿼리를 사용하면 된다.

select * from (
SELECT Subject, Name, RANK() OVER (PARTITION BY Subject ORDER BY Score DESC) as RN
FROM Table
) a
where a.RN <= 2

 

아래는 위 쿼리의 결과

Subject        Name      Rank
Math           Joe        1
Math           Jim        2
History        Jim        1
History        Joe        2
Geography      Tim        1
Geography      Jim        2