[DBMS] 순위 함수

류재성's avatar
Dec 04, 2024
[DBMS] 순위 함수
 
💡
순위 함수는 결과에 순번 또는 순위를 매기는 역할을 한다. 함수 종류로는 RANK(), DENSE_RANK(), ROW_NUMBER(), NTILE() 가 있다. 형식은 다음과 같다.
 
<함수이름> () OVER ( [PARTITION BY <컬럼....>] ORDER BY <컬럼명...> )

1. ROW_NUMBER()

💡
ROW_NUMBER() 은 각 행에 고유한 번호를 부여하는 함수이다. 고유한 번호를 부여하기 때문에 일치하는 값이 있더라도 다른 번호를 부여한다.
 
USE sqlDB; SELECT ROW_NUMBER() OVER(ORDER BY height DESC) [키큰순위],name,addr,height FROM userTb1
 
notion image
 
키가 큰 순서로 정렬했을 때 같은 키를 가진 사람이 있으나 순위는 2등 3등으로 표시된다.
 
이번에는 전체 순위가 아닌 각 지역별로 순위를 주려고 한다. 이런 경우 PARTITION BY 절을 사용한다.
 
USE sqlDB; SELECT addr, ROW_NUMBER() OVER(PARTITION BY addr ORDER BY height DESC, name ASC) [지역별키큰순위],name,height FROM userTb1
notion image
 

2. RANK()

💡
RANK()함수는 각 행에 순위를 부여한다. 동일한 값이 있을 경우 동일한 순위를 부여한다. 중요한 차이점은 순위가 중복되면 그다음 순위가 건너뛴다는 점이다.
 
SELECT RANK() OVER(ORDER BY height DESC) [키큰순서], name, addr, height FROM userTb1
notion image
 
동일한 값은 동 순위를 부여하지만 그 다음 순위는 건너 띈 4등이 부여된다.
 

3. DENSE_RANK()

💡
DENSE_RANK() 함수도 각 행에 순위를 부여하며, 동일한 값이 있을 경우 동일한 순위를 부여한다. RANK() 함수와의 차이는 DENSE_RANK() 는 동일한 순위 다음 오는 순위가 연속된다는 점이다.
 
SELECT DENSE_RANK() OVER(ORDER BY height DESC) [키큰순서], name, addr, height FROM userTb1
notion image
 
동일한 순위 다음 순위가 3등으로 부여가 된다.
 

4. NTILE()

💡
NTILE() 함수는 데이터를 지정한 N개의 그룹으로 나눈 후, 해당 그룹에 순번을 부여한다.
 
SELECT NTILE(4) OVER(ORDER BY height DESC) [반번호],name,addr,height FROM userTb1
 
notion image
 
4개의 그룹으로 지정하면 10개의 데이터가 3,3,2,2 개의 그룹으로 나눠진 후 순번이 부여된다.
 
 
Share article

{CODE-RYU};