[Oracle] 오라클 그룹별 순번을 매기는 방법 (같은 번호 부여)
- 데이터베이스/오라클
- 2021. 12. 27.
오라클에서 그룹별로 순번을 부여하기 위해서는 OVER 절과 분석함수(DENSE_RANK, ROW_NUMBER)를 사용하면 된다. 그룹별 단일 순번을 부여하기 위해서는 DENSE_RANK 함수를 사용하고, 연속된 순번을 부여하기 위해서는 ROW_NUMBER 함수를 사용하면 된다.
예제 1 - 그룹별 단일 순번
SELECT job
, empno
, ename
, sal
, DENSE_RANK() OVER(ORDER BY job) AS rnk
FROM emp
ORDER BY job
DENSE_RANK() OVER(ORDER BY [그룹칼럼1, 그룹칼럼2, 그룹칼럼3 ...])
DENSE_RANK 함수와 OVER 절을 사용하여 직군별(job) 단일 순번을 부여하였다.
순번을 매길 칼럼(그룹)을 OVER 절 내부의 ORDER BY 절에 부여하면 된다.
메인 쿼리의 ORDER BY와 OVER 절의 ORDER BY는 동일한 순서로 작성하는 것이 좋다.
예제 2 - 그룹별 연속된 순번
SELECT job
, empno
, ename
, sal
, ROW_NUMBER() OVER(PARTITION BY job ORDER BY job, sal) AS rnk
FROM emp
ORDER BY job, sal
ROW_NUMBER() OVER(PARTITION BY [그룹칼럼1, 그룹칼럼2 ...] ORDER BY [정렬칼럼1, 정렬칼럼2 ...])
ROW_NUMBER 함수와 OVER 절을 사용하여 직군별(job) 연속된 순번을 부여하였다.
연속된 순번을 부여할 그룹을 PARTITION BY절에 작성하고 연속 순번의 정렬 기준을 ORDER BY절에 작성하면 된다.
OVER 절의 ORDER BY는 연속된 순번을 부여할 정렬 기준이므로 정렬할 기준 칼럼을 모두 작성하는 것이 좋다.
GROUP BY 절 사용 시 순번 매기기
SELECT deptno
, job
, SUM(sal)
, DENSE_RANK() OVER(ORDER BY deptno) AS rnk
FROM emp
GROUP BY deptno, job
ORDER BY deptno, job
GROUP BY 절을 사용할 때도 동일하게 그룹별 순번을 부여할 수 있다.
▼ DENSE_RANK 함수와 ROW_NUMBER 함수의 자세한 사용법을 알고 싶으면 아래를 참고하면 된다.