오라클 그룹별 순번, 순위 매기기(ROW_NUMBER, RANK) 함수
많은 경우에 데이터를 정렬하고 특정 조건에 따라 순번이나 순위를 매기는 것이 필요합니다. 오라클 데이터베이스에서는 ROW_NUMBER
와 RANK
함수를 사용하여 그룹별로 순번과 순위를 매길 수 있습니다.
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_NUMBER
와 RANK
함수를 사용하면 그룹별로 데이터를 정렬하고 순번과 순위를 할당할 수 있습니다. 이를 통해 유용한 정보를 얻을 수 있으며, 분석이나 보고서 작성에도 활용할 수 있습니다.
댓글