SQL) 순위함수(RANK, DENSE_RANK, ROW_NUMBER)
본문 바로가기
Data Base/SQL

SQL) 순위함수(RANK, DENSE_RANK, ROW_NUMBER)

by 조훈이 2021. 9. 3.

순위 함수

RANK(), DENSE_RANK(), ROW_NUMBER()


  RANK() 

  : 순위에 대해서 중복되는 값들에 대해선 동일한 순위로 표시를 한다. 그리고 다음에 나오는 수의 순위는 이전에 중복되었던 값들의 수만큼 올라간다.

CREATE TABLE Study (
	Value INT
);
    
INSERT INTO Study VALUES
(100), (300), (300), (200), (300), (100), (200), (400);

SELECT Value,
RANK() OVER (ORDER BY Value ASC) AS 'Rank'
FROM Study;

RANK() 예시

  위 예시처럼 중복되는 값들에 대해선 동일한 순위가 부여가 되었고, 그 다음 값에 대한 순위는 이전에 중복된 값들의 개수만큼 올라간 순위가 부여되었다.


  DENSE_RANK() 

  : 순위에 대해서 중복되는 값들에 대해선 동일한 순위로 표시한다.  그리고 중복된 수들 다음에 나오는 수의 순위는 RANK() 와 달리 이전 중복되는 값들의 순위의 바로 다음 순위가 부여가 된다.

CREATE TABLE Study (
	Value INT
);
    
INSERT INTO Study VALUES
(100), (300), (300), (200), (300), (100), (200), (400);

SELECT Value,
DENSE_RANK() OVER (ORDER BY Value ASC) AS 'Rank'
FROM Study;

DENSE_RANK() 예시

  예시 결과를 보면 중복되는 값들에 대해선 같은 순위가 부여가 된 후 다음 값에 대해선 그 다음 순위가 부여된 것을 확인할 수 있다. 


  ROW_NUMBER() 

  : 이전 RANK() 와 DENSE_RANK() 는 같은 값에 대해서 같은 순위를 부여하였지만, ROW_NUMBER() 에선 같은 값들에 대해서도 다른 순차적 순위를 부여한다. 값들에 대해서 동일한 순위를 가지는 값이 없는 것 이다.

CREATE TABLE Study (
	Value INT
);
    
INSERT INTO Study VALUES
(100), (300), (300), (200), (300), (100), (200), (400);

SELECT Value,
ROW_NUMBER() OVER (ORDER BY Value ASC) AS 'Rank'
FROM Study;

ROW_NUMBER() 예시

  모든 값들에 대해서 다른 순위가 부여가 된 것을 확인할 수 있다. 같은 값을 가져도 순위의 위치가 다 다르다.

728x90

댓글