Programming/Database

ROW_NUMBER OVER PARTITION BY 그룹 내 순위를 반환하는 함수

Jan92 2024. 7. 21. 01:40
반응형

그룹 내 순위를 반환하는 함수 ROW_NUMBER OVER PARTITION BY

 

ROW_NUMBER OVER PARTITION BY

/* PARTITION BY, ORDER BY 절 모두 여러 개의 컬럼을 기준으로 설정할 수 있습니다. */
ROW_NUMBER() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼])

 

그룹 내 순위를 조회하는 함수 패턴인 'ROW_NUMBER OVER PARTITION BY'는 다음과 같은 문법으로 사용되는데요.

문법의 각 부분에 대해서 살펴보면 다음과 같습니다.

 

 

 

ROW_NUMBER()

먼저 'ROW_NUMBER()'는 윈도우 함수(ANSI/ISO SQL 표준 WINDOW FUNCTION) 중 순위를 반환하기 위해 사용되는 함수로 각 행에 고유한 번호를 부여합니다. (이때 번호는 1부터 시작하여 증가합니다.)

순위를 반환하기 위해 사용되는 다른 윈도우 함수인 'RANK()'와 'DENSE_RANK()'의 경우 동일한 값에 동일한 순위를 반환하는 반면, 'ROW_NUMBER()'의 경우 동일한 값이 있어도 순위는 중복되지 않는다는 특징이 있습니다.

 

 

OVER

'OVER'의 경우 윈도우 함수와 함께 사용되어 데이터 집합 내에서 계산이 수행될 범위를 정의합니다.

OVER 절 안에 'PARTITION BY' 절과 'ORDER BY' 절을 포함할 수 있습니다.

 

 

PARTITION BY

순위의 정렬 기준을 정하기 위한 'ORDER BY' 절이 필수인 반면, 'PARTITION BY' 절은 필수는 아니지만 해당 부분을 통해 데이터 집합의 데이터를 특정 기준에 따라 그룹으로 나눌 수 있습니다.

PARTITION BY를 지정하지 않으면 데이터 집합의 모든 행을 단일 그룹으로 취급하게 됩니다.

 

 

ORDER BY

'ORDER BY' 절의 경우 필수로 지정되어야 하며, 해당 절에 지정된 컬럼을 기준으로 각 그룹 내의 행들을 정렬하는 역할을 합니다.

 

 

***

정리하자면 해당 함수 패턴의 경우 'PARTITION BY' 절을 통해 데이터를 특정 기준에 따라 그룹으로 나누고 'ORDER BY' 절을 통해 각 그룹 내의 행들을 정렬하게 됩니다.

그리고 최종적으로 이렇게 그룹화 + 정렬된 데이터 집합에 대해 'ROW_NUMBER()' 함수를 사용하여 각 행의 고유한 순위를 매기는 것입니다.

 

 


사용 예시

ORDER BY 절만 적용한 경우

첫 번째 예시는 'PARTITION BY' 절을 사용하지 않고 'ORDER BY' 절만 적용한 예시입니다.

ORDER BY에 적용된 'score' 컬럼을 기준, 내림차순(DESC)으로 정렬하여 순위를 매기게 됩니다.

 

 

ORDER BY 절과 PARTITION BY 절을 모두 적용한 경우

두 번째 예시는 'ORDER BY' 절과 함께 'PARTITION BY' 절도 사용한 예시입니다.

PARTITION BY에 적용된 'subject_name' 컬럼을 기준으로 데이터를 그룹화하여 각 그룹에 대해 'score' 컬럼을 기준, 내림차순으로 정렬하여 순위를 매기게 됩니다.

 

 

PARTITION BY 절에 여러 컬럼을 지정한 경우

세 번째 예시는 'PARTITION BY' 절에 여러 컬럼을 지정하는 경우의 예시입니다.

'subject_name' 컬럼과 'grade' 컬럼, 두 컬럼을 기준으로 하여 데이터를 그룹화 한 뒤, 각 그룹에 대해 'score' 컬럼을 기준으로 내림차순 정렬하여 순위를 매기게 됩니다.

(ORDER BY 절의 대상으로도 여러 컬럼을 지정할 수 있습니다.)

 

 

 

< 참고 자료 >

https://m.blog.naver.com/seokcrew/221580449695

반응형