본문 바로가기
전산 관련 시험/DB(SQLP, SQLD) 문제풀이

SQLP_NTILE( ) 함수

by 응_비 2022. 10. 21.

NTILE(n) : 파티션 별로 N등분하여 조를 나눈다. 이때 나머지는 상위 조에게 순서대로 배정되게 한다.

 

 

[정의]

 

행 데이터를 그룹별로 나누어 례대로 행 번호를 부여하는 분석 함수입니다.

 

[구문 형식]

 

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개씩 나누어져 그룹별 행번호가 부여합니다.

 

https://statwith.tistory.com/793

 

[오라클 함수] NTILE 함수

o NTILE | 문법 ntile::= | 목적 NTILE함수는 분석 함수이다. 그룹 내에서 정렬된 데이터를 expr에 의해 지정된 bucket의 수로 분할하여, 각 행을 적절한 bucket의 번호를 부여하여 할당한다. buckets은 1~expr..

statwith.tistory.com

 

댓글