반응형
SELECT 로 데이터를 가져 오면서 전체 또는 원하는 그룹단위로 일련번호를 부여 해야 할 때

ROW_NUMBER() 를 사용하면 쉽게 할 수 있다.

Table를 마이그레이션 할 때, 레거시 에서는 PK를 복잡하게 부여하였는데 새로운 시스템 에서는

일련번호로 단순화 한다거나 할 때 사용하면 유용 하다.

예를 들어 emp_code, request_ym 로 GROUP 하고 relation 으로 정렬하여 일련번호를 부여하고자 한다면

다음과 같이 할 수 있다.

ROW_NUMBER() OVER (PARTITION BY emp_code, request_ym ORDER BY relation) as seq_no 

만일 역순으로 일련번호를 부여 하고자 하면 ORDER BY relation DESC 처럼 하면 된다.

* ORDER BY 에 의해 동순 인 경우에도 ROW_NUMBER()는 1, 2, 3, ... 과 같이 하는데 만약 동순 일때 동일한 순위번호를

  부여하고자 하면 ROW_NUMBER() 대신에 DENSE_RANK()를 사용하면 된다.

  또한 DENSE_RANK()는 동순에 대하여 동일한 순위번호를 매기고 나서 그 다음 일련번호를 부여(즉, 1, 2, 2, 2, 3, 4, ... 

  와  같이) 하게 되는데,  RANK() 함수를 사용하면 동일한 순위번호 갯수만큼 건너 띄고 다음 일련번호를 부여 하게

  된다 (즉, 1, 2, 2, 2, 5, 6 ... 와 같이).




+ Recent posts