티스토리 뷰

서론

값에 따라 순위를 정해야 할 때, SQL 내장 함수인 RANK를 사용하여 처리하는 방법을 소개합니다.

본론

RANK

RANK 함수는 OVER 절과 같이 사용하며 OVER 절의 조건에 따라 순위가 결정됩니다.

RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > )

OVER

OVER절에서 순위를 지정할 조건으로 PARTITION BY라는 옵션을 가집니다.

PARTITION BY

PARTITION BY는 그룹별로 순위를 지정해야 할 때 사용합니다.
해당 절 뒤에 칼럼을 적으면 만들어진 그룹마다 순위가 부여됩니다.

ORDER BY

ORDER BY는 말그대로 순위를 매기는 순서를 정의합니다. AGE 라는 컬럼을 기준으로 오름차순과 내림차순으로 순위를 매길 때는 아래 코드처럼 작성할 수 있습니다.

--내림차순 순위(큰 것이 1등)
RANK () OVER (ORDER BY age DESC)

--오름차순 순위(작은 것이 1등)
RANK () OVER (ORDER BY age ASC)

DENSE_RANK

사용이유

RANK의 결과에서 같은 값이 존재하는 경우에는 아래 예시처럼 바로 다음 수는 이전 값들의 개수만큼 순위가 차이가 나게 됩니다.
예시)

| score | rank |
| ----- | ---- |
| 4     | 1    |
| 4     | 1    |
| 3.85  | 3    | 2가 아니라 3이 되어버렸음.
| 3.65  | 4    |
| 3.65  | 4    |
| 3.5   | 6    |

DENSE_RANK를 사용하면 아래 예시처럼 고유값에 대해서만 순위가 매겨집니다. `

| score | rank |
| ----- | ---- |
| 4     | 1    |
| 4     | 1    |
| 3.85  | *2   | 
| 3.65  | 3    |
| 3.65  | 3    |
| 3.5   | *4   |

결론

RANK와 DENSE_RANK의 차이점에 대해서 알아보았습니다. 조합으로 이루어진 쿼리문이 익숙해지려면 아직 먼 이야기 같습니다.

참고: https://learn.microsoft.com/en-us/sql/t-sql/functions/dense-rank-transact-sql?view=sql-server-ver16

'개발자 > 데이터베이스(DB)' 카테고리의 다른 글

[SQL] Function 만들기  (0) 2024.02.13
[SQL] LEFT JOIN과 ON  (0) 2024.02.06
[SQL] GROUP BY와 HAVING  (0) 2024.02.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함