본문 바로가기

Data/Data Analysis

[SQL] RANK(), ROW_NUMBER(), DENSE_RANK()

반응형

RANK()

함수는 중복 순위 다음은 해당 개수만큼 건너뛰고 반환

예를들어서 다음과 같은 A테이블이 있다하면

pay user
4.00$ A
3.00$ B
3.00$ C
2.00$ D
select rank() over(order by pay desc) as rank, pay, user
from A

다음과 같이 출력이된다

rank pay user
1 4.00$ A
2 3.00$ B
2 3.00$ C
4 2.00$ D

ROW_NUMBER()

함수는 중복 순위 상관없이 순차적으로 반환

select row_number() over(order by pay desc) as rank, pay, user
from A
rank pay user
1 4.00$ A
2 3.00$ B
3 3.00$ C
4 2.00$ D

DENSE_RANK()

select dense_rank() over(order by pay desc) as rank, pay, user
from A
rank pay user
1 4.00$ A
2 3.00$ B
2 3.00$ C
3 2.00$ D

 

만약 그룹별로 순위를 매기고싶다면 over문에 partition by 구문을 추가하면 된다

만약 다음과같이 B테이블이 있다면

pay user team
4.00$ A J
3.00$ B J
3.00$ C B
2.00$ D B

예시로 row_number함수를 이용한다치면

select row_number() over(partition by team order by pay desc) as rank, pay, user, team
from A
row_number pay user team
1 4.00$ A J
2 3.00$ B J
1 3.00$ C B
1 2.00$ D B

팀에 따라서 row_number수를 보여주게 된다

반응형