아디봉의.net

[MSSQL] row_number() over, rank() over, dense_rank() over [펌] 본문

MS-SQL

[MSSQL] row_number() over, rank() over, dense_rank() over [펌]

아디봉 2013. 5. 13. 09:18

1. ROW_NUMBER() OVER(ORDER BY 정렬할 필드)

2. RANK() OVER(ORDER BY 정렬할 필드)

3. DENSE_RANK() OVER(ORDER BY 정렬할 필드)

세 가지 함수 모두 순위를 구하는 용도로 사용이 가능하다. 그러나 조금씩 용법이 다르다.

1. ROW_NUMBER() OVER()

- 순위를 구하기는 하나 같은 값에 대하여 무시를 한다.

2. RANK() OVER()

- 같은 값은 동등한 순위로 값을 반환한다. 예로 100, 95, 95, 84, 70, 70, 56 이라는 값이 있을 때 결과값은 1, 2, 2, 4, 5, 5, 7 이 된다.

3. DENSE_RANK() OVER()

- 같은 값을 동등한 순위로 값을 반환한다. 하지만 RANK()와 다르게 동등한 순위의 다음 순위는 순차적으로 메겨진다. 2번과 같은 예가 있을 경우 RANK()의 결과값은 1, 2, 2, 4, 5, 5, 7 이 되었지만, DENSE_RANK() OVER() 는 1, 2, 2, 3, 4, 4, 5가 된다.

실제 사용 예제)

1. ROW_NUMBER() OVER(ORDER BY 정렬할 필드)

2. RANK() OVER(ORDER BY 정렬할 필드)



3. DENSE_RANK() OVER(ORDER BY 정렬할 필드)

3.