금백조의 개발 블로그

[Oracle]NTILE 함수 사용법 및 예제 본문

Database/Oracle

[Oracle]NTILE 함수 사용법 및 예제

금백조 2021. 5. 16. 13:29
반응형

서론

 

요즘 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

 

[오라클 함수] NTILE 함수

NTILE 문법 MAIN ntile::= 그림 설명 참 조 : "Analytic Functions " for information on syntax, semantics, and restrictions, including valid forms of expr 목적 MAIN NTILE함수는 분석 함수 이다. 순서화..

statwith.tistory.com

 

반응형