[Oracle] 오라클 그룹별 순번을 매기는 방법 (같은 번호 부여)

오라클에서 그룹별로 순번을 부여하기 위해서는 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 절을 사용할 때도 동일하게 그룹별 순번을 부여할 수 있다.

예제쿼리(테이블포함).txt
0.00MB

 

DENSE_RANK 함수와 ROW_NUMBER 함수의 자세한 사용법을 알고 싶으면 아래를 참고하면 된다.

 

[Oracle] 오라클 RANK, DENSE_RANK 순위 함수 사용법 (over, partition by)

오라클에서 성적, 급여, 매출 등 순위를 구하기 위해서 순위 함수(RANK, DENSE_RANK)를 사용하면 된다. 순위 함수의 순위는 OVER 함수 내부의 ORDER BY 컬럼 값으로 결정된다. RANK() : 중복 순위 개수만큼

gent.tistory.com

 

[Oracle] 오라클 조회 순번 매기는 방법 ( ROWNUM, ROW_NUMBER() )

1. ROWNUM 키워드 이용하는 방법  - 조회된 순서되로 순번을 매긴다. SELECT ROWNUM , a.* FROM emp a - ORDER BY 를 사용하면 순번이 뒤섞이므로 정렬된 서브쿼리 결과에 ROWNUM 을 매겨야 한다. SELECT ROWNUM..

gent.tistory.com

 

댓글

Designed by JB FACTORY