본문 바로가기
카테고리 없음

오라클 그룹별 순번, 순위 매기기(ROW_NUMBER, RANK) 함수

by nono22 2024. 1. 17.

오라클 그룹별 순번, 순위 매기기(ROW_NUMBER, RANK) 함수

많은 경우에 데이터를 정렬하고 특정 조건에 따라 순번이나 순위를 매기는 것이 필요합니다. 오라클 데이터베이스에서는 ROW_NUMBERRANK 함수를 사용하여 그룹별로 순번과 순위를 매길 수 있습니다.

ROW_NUMBER 함수

ROW_NUMBER 함수는 정렬된 결과에 대해 각 행에 순서대로 번호를 부여합니다. 즉, 정렬된 결과에서 몇 번째 행인지를 나타내는 값을 반환합니다.

SELECT column1, column2, ...
FROM   table_name
ORDER BY column1, column2, ...;

위와 같이 데이터를 정렬한 뒤에 ROW_NUMBER 함수를 사용하면 각 행에 순번을 부여할 수 있습니다.

SELECT column1, column2, ..., ROW_NUMBER() OVER (ORDER BY column1, column2, ...) AS row_num
FROM   table_name;

위의 쿼리에서 ROW_NUMBER() 함수는 순번을 부여하는 역할을 하고, OVER 절은 정렬 순서를 지정합니다. AS row_num은 순번 값의 컬럼명을 "row_num"으로 지정한 것입니다.

RANK 함수

RANK 함수는 정렬된 결과에서 각 행이 몇 번째로 순위를 가지는지를 나타냅니다. 만약 동점인 값이 있다면 동점 순위가 부여됩니다.

SELECT column1, column2, ...
FROM   table_name
ORDER BY column1, column2, ...;

RANK 함수는 ROW_NUMBER 함수와 사용 방법이 거의 동일하며, ROW_NUMBER 함수 대신 RANK 함수를 사용하면 됩니다.

SELECT column1, column2, ..., RANK() OVER (ORDER BY column1, column2, ...) AS rank_num
FROM   table_name;

위의 쿼리에서 RANK() 함수는 순위를 부여하는 역할을 하고, OVER 절은 정렬 순서를 지정합니다. AS rank_num은 순위 값의 컬럼명을 "rank_num"으로 지정한 것입니다.

예제

다음은 "employees"라는 테이블에서 급여에 따라 순번과 순위를 매기는 예제입니다.

SELECT employee_id, first_name, last_name, salary,
       ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num,
       RANK() OVER (ORDER BY salary DESC) AS rank_num
FROM   employees;

위의 쿼리는 "employees" 테이블의 모든 열을 가져오며, 급여를 기준으로 내림차순 정렬합니다. 그리고 ROW_NUMBER 함수를 사용하여 "row_num" 컬럼에 순번을, RANK 함수를 사용하여 "rank_num" 컬럼에 순위를 매깁니다.

이렇게 ROW_NUMBERRANK 함수를 사용하면 그룹별로 데이터를 정렬하고 순번과 순위를 할당할 수 있습니다. 이를 통해 유용한 정보를 얻을 수 있으며, 분석이나 보고서 작성에도 활용할 수 있습니다.

댓글