순위 함수
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;
위 예시처럼 중복되는 값들에 대해선 동일한 순위가 부여가 되었고, 그 다음 값에 대한 순위는 이전에 중복된 값들의 개수만큼 올라간 순위가 부여되었다.
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;
예시 결과를 보면 중복되는 값들에 대해선 같은 순위가 부여가 된 후 다음 값에 대해선 그 다음 순위가 부여된 것을 확인할 수 있다.
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;
모든 값들에 대해서 다른 순위가 부여가 된 것을 확인할 수 있다. 같은 값을 가져도 순위의 위치가 다 다르다.
728x90
'Data Base > SQL' 카테고리의 다른 글
SQL) 문자열 다루기_2 (LOCATE/LEFT/RIGHT/LOWER/UPPER) (0) | 2021.09.10 |
---|---|
SQL) 문자열 다루기_1 (LENGTH/CONCAT/SUBSTRING) (0) | 2021.09.10 |
SQL) You can't specify target table '<Table>' for update in FROM clause (0) | 2021.09.02 |
SQL) JOIN (INNER/LEFT/RIGHT/OUTER) (1) | 2021.08.29 |
SQL) 연산자 우선순위 (0) | 2021.08.23 |
댓글