반응형
RANK(), DENSE_RANK(), ROW_NUMBER() 모두 윈도우 함수 내에 있는 순위 함수이다.
기본적으로 세 함수 모두 순위를 구하는 함수이지만, 약간의 특징적 차이가 있으므로 알아보자.
간단 요약
함수명 | 설 명 |
RANK() | 여러 행의 값이 같은 경우라면 같은 순위를 부여 공동 순위를 부여하고 그 다음 나오는 행에는 같은 순위가 나왔던 숫자만큼 건너 뛰고 순위를 부여 |
DENSE_RANK() | 여러 행의 값이 같은 경우라면 같은 순위를 부여 공동 순위를 부여하고 그 다음 나오는 행에는 순위를 건너뛰지 않고 이어서 순위를 부여 |
ROW_NUMBER() | 각 행에 순위를 부여할 때 동점인 경우가 있어도 이를 무시하고 연속적인 순위를 부여 |
RANK()
- 순위 함수 중에서도 일반적으로 가장 많이 사용하는 함수
- 여러 행의 값이 같은 경우라면 같은 순위를 부여해주는 방식이며, 공동 순위를 부여하고 그 다음 나오는 행에는 같은 순위가 나왔던 숫자만큼 건너 뛰고 순위를 부여
- 윈도우 함수이므로 OVER() 연결되는 구조로 문법이 사용
SELECT *
, RANK() OVER(ORDER BY `홈런` DESC) AS 'RANK'
FROM KBO_HR
이름 | 포지션 | 홈런 | RANK |
이승엽 | 내야수 | 467 | 1 |
최정 | 내야수 | 403 | 2 |
이대호 | 내야수 | 351 | 3 |
양준혁 | 지명타자 | 351 | 3 |
최형우 | 외야수 | 342 | 5 |
장종훈 | 내야수 | 340 | 6 |
이호준 | 내야수 | 337 | 7 |
DENSE_RANK()
- 같은 값이 나오는 행에 동일한 순위를 부여해준다는 점에서는 RANK() 함수와 동일
- 동일한 순위 부여한 후 다음에 나오는 행에는 순위를 건너뛰지 않고 이어서 순위를 부여
SELECT *
, DENSE_RANK() OVER(ORDER BY `홈런` DESC) AS 'RANK'
FROM KBO_HR
이름 | 포지션 | 홈런 | RANK |
이승엽 | 내야수 | 467 | 1 |
최정 | 내야수 | 403 | 2 |
이대호 | 내야수 | 351 | 3 |
양준혁 | 지명타자 | 351 | 3 |
최형우 | 외야수 | 342 | 4 |
장종훈 | 내야수 | 340 | 5 |
이호준 | 내야수 | 337 | 6 |
ROW_NUMBER()
- 각 행에 순위를 부여할 때 동점인 경우에도 이를 무시하고 연속적인 순위를 부여
SELECT *
, ROW_NUMBER() OVER(ORDER BY `홈런` DESC) AS 'RANK'
FROM KBO_HR
이름 | 포지션 | 홈런 | RANK |
이승엽 | 내야수 | 467 | 1 |
최정 | 내야수 | 403 | 2 |
이대호 | 내야수 | 351 | 3 |
양준혁 | 지명타자 | 351 | 4 |
최형우 | 외야수 | 342 | 5 |
장종훈 | 내야수 | 340 | 6 |
이호준 | 내야수 | 337 | 7 |
RANK() vs DENSE_RANK() vs ROW_NUMBER()
이름 | 포지션 | 홈런 | RANK | DENSE_RANK | ROW_NUMBER |
이승엽 | 내야수 | 467 | 1 | 1 | 1 |
최정 | 내야수 | 403 | 2 | 2 | 2 |
이대호 | 내야수 | 351 | 3 | 3 | 3 |
양준혁 | 지명타자 | 351 | 3 | 3 | 4 |
최형우 | 외야수 | 342 | 5 | 4 | 5 |
장종훈 | 내야수 | 340 | 6 | 5 | 6 |
이호준 | 내야수 | 337 | 7 | 6 | 7 |
[참고]
https://data-kindergarten.tistory.com/44
반응형
'Develops > SQL' 카테고리의 다른 글
[Tibero] AGGR_CONCAT 함수 (여러 행을 하나의 값으로 합치기) (0) | 2024.07.14 |
---|---|
[Mybatis] Mybatis 파라미터 ${}(Literal)과 #{}(bind)의 차이점 (0) | 2024.03.30 |
[ORACLE] PIVOT, UNPIVOT 함수 (행을 열로, 열을 행으로 변환) (0) | 2024.03.26 |
[ORACLE] 계층형 쿼리( START WITH ... CONNECT BY / LEVEL 활용 ) (0) | 2024.03.26 |
[ORACLE] SIGN 함수 (양수,음수 구분하기) (0) | 2024.03.26 |