[Oracle]NTILE 함수 사용법 및 예제
서론
요즘 SQLP 시험 준비를 위해 익숙하지 않은 Oracle 함수에 대해 정리하고 있습니다. 오늘은 Oracle의 NTITLE 함수에 대해 작성해보려 합니다.
본론
[정의]
행 데이터를 그룹별로 나누어 차례대로 행 번호를 부여하는 분석 함수입니다.
[구문 형식]
SELECT NTILE([그룹으로 나눌 정수]) OVER (PARTITION BY [컬럼1] ORDER BY [컬럼2])
[특징]
1.전체 행 데이터 수를 그룹으로 나누었을 때 나머지가 존재하면 첫 번째 그룹부터 나머지가 안남을 때까지 1씩 부여합니다.
(예 : 전체행이 12개고 그룹이 5일 때 12를 5로 나눈 나머지가 2이므로 1~5번 그룹에 2행을 부여하고 1,2번 그룹에 1행씩 추가 부여합니다.)
2.PARTITION BY를 생략하면 전체 행에 대해서 그룹화가 수행됩니다. 반대로 PARTITION BY를 지정하면 해당 파티션 내에서 그룹화를 진행하여 행 번호를 부여합니다.
예제 (Oracle scott 계정 데이터 기준)
[예제 1]
select empno, ename, sal, NTILE(5) over (order by sal desc) as X
from emp;
[결과]
[설명]
총 12행이므로 12를 5로 나눈 나머지가 2입니다. 따라서 그룹 1과 그룹 2에 1행씩 추가로 부여하여 그룹 1,2는 3행, 그룹 3,4,5는 2행으로 나누어지고 그룹 순서대로 행 번호가 부여됩니다.
[예제 2]
select empno, ename, deptno, sal, NTILE(2) over (partition by deptno order by sal desc) as X
from emp;
[결과]
[설명]
부서(deptno) 별로 파티션이 먼저 나누어집니다.(파티션 1 : deptno = 10, 파티션 2 : deptno = 20, 파티션 3 : deptno = 30) 그리고 파티션 내에서 2개의 그룹으로 나눕니다. 파티션 1, 파티션 2는 행수가 각각 3개이므로 그룹 1에 1행씩 추가로 부여하여 그룹별 행 번호가 부여됩니다. 파티션3은 총 6행이므로 그룹1, 그룹2 행이 각각 3개씩 나누어져 그룹별 행번호가 부여합니다.
[결론]
NTILE 함수를 잘만 활용하면 데이터를 등급별로 나누는 등 활용할 수 있는 방법이 많을 것 같습니다. 저도 필요시 적극적으로 활용해봐야겠습니다.
Reference
[오라클 함수] NTILE 함수
https://statwith.tistory.com/793