2018년 10월 2일 화요일

[SQL Server] 랭킹 함수 알아보기

SQL 서버에서 랭킹 함수를 써야 하는 경우가 있다.

RANK, DENSE_RANK, ROWNUMBER, NTILE 등이 순위 함수로 되어있는데 각각의 차이점을 정리해본다.

SQL SERVER 2008부터 사용가능한 함수들이다.

사용법:  함수명() OVER ( [PARTITION 컬럼] ORDER BY 컬럼 혹은 식) 

ROWNUMBER의 경우 중복을 허용하지 않는다.

RANK와 DENSE_RANK의 경우 중복이 허용된다. 다만 둘의 랭킹 표기 방식이 조금 다르다. 
RANK의 경우 중복이 되면 그 다음 바로 수가 아니라 중복된 수 만큼 처리된 후 다음 순위가 나온다. 예를 들면 1,1,3,4 1이 두번 중복되므로 2순위가 없고 3순위가 나오는 것이다. 
DENSE_RANK의 경우 중복이 되면 중복된 수와 관계없이 +1을 한 값이 나온다. 예를 들면 1,1,2,3,4 와 같이 1이 중복 되었어도 다음 순위는 RANK와 달리 2가 나오는 것이다.
NTILE의 경우는 NTILE(n)과 같이 행들을 n개씩 묶음으로 보이도록 한다.

비슷한 함수들이지만 특성이 다르므로 잘 사용하면 좋을 것 같다.


아래 링크를 참조하자!!!

댓글 없음:

댓글 쓰기