1. ROW_NUMBER()

중복 허용없이 무조건 순위를 나눈다
SELECT departmentId
     , name
     , salary
     , ROW_NUMBER() OVER (PARTITION BY departmentId ORDER BY salary DESC) AS salary_rank
FROM employee

출력 결과

departmentid별로 salary가 내림차순으로 ROW_NUMBER를 정하면 다음과 같다.

> departmentid 1이고 salary가 9000으로 가장 큰 Max가 1위

> departmentid 1이고 salary가 8500으로 두 번째로 큰 Joe, Randy가 있는데

  동일한 값이라도 고유한 순위를 부여하므로 Joe가 2위, Randy가 3위

> departmentid 1이고 salary가 7000으로 세 번째로 큰 Will이 4위

> departmentid 1이고 salary가 6900으로 네 번째로 큰 Janet이 5위

 

 

 

2. DENSE_RANK()

동일한 점수는 같은 순위를 매긴다
공동 2위 다음은 3위이다
SELECT departmentId
     , name
     , salary
     , DENSE_RANK() OVER (PARTITION BY departmentId ORDER BY salary DESC) AS salary_rank
FROM employee

출력 결과

departmentid별로 salary가 내림차순으로 DENSE_RANK를 정하면 다음과 같다.

> departmentid 1이고 salary가 9000으로 가장 큰 Max가 1위

> departmentid 1이고 salary가 8500으로 두 번째로 큰 Joe, Randy가 공동 2위

> departmentid 1이고 salary가 7000으로 세 번째로 큰 Will이 3위

> departmentid 1이고 salary가 6900으로 네 번째로 큰 Janet이 4위

 

 

 

3. RANK()

동일한 점수는 같은 순위를 매긴다
공동 2위 다음은 4위이다
SELECT departmentId
     , name
     , salary
     , RANK() OVER (PARTITION BY departmentId ORDER BY salary DESC) AS salary_rank
FROM employee

출력 결과

departmentid별로 salary가 내림차순으로 RANK를 정하면 다음과 같다.

> departmentid 1이고 salary가 9000으로 가장 큰 Max가 1위

> departmentid 1이고 salary가 8500으로 두 번째로 큰 Joe, Randy가 공동 2위

> departmentid 1이고 salary가 7000으로 세 번째로 큰 Will이 4위

> departmentid 1이고 salary가 6900으로 네 번째로 큰 Janet이 5위

 

+ Recent posts