NTITLE() 함수를 사용시 레코드 수에 대해서 NTITLE()에 파라미터에 세팅된 값으로 나눈 비율로 순위를 구함 레코드가 100개이고 NTITLE(5)이면 100/5 = 20개씩 그룹으로 묶어 순위를 출력 이때 나머지가 없을경우와 / 있을경우가 배분 차이 있음으로 이 내용에 대해서 알아보기로 한다. 나머지가 없을경우 레코드 : 20, NTITLE(5) SELECT V, NTILE(5) OVER(ORDER BY V) X FROM (SELECT LEVEL V FROM DUAL CONNECT BY LEVEL <= 20); V X 1 1 2 1 3 1 4 1 4개씩 균등 배분 5 2 6 2 7 2 8 2 4개씩 균등 배분 9 3 10 3 11 3 12 3 4개씩 균등 배분 13 4 14 4 15 4 16 4 4개씩 균등 배분 17 5 18 5 19 5 20 5 4개씩 균등 배분 20/5 = 4개씩 균등 배분 --------------------------------------------------------------------------------------------------- 나머지가 생길경우 레코드 : 17, NTITLE(5) SELECT V, NTILE(5) OVER(ORDER BY V) X FROM (SELECT LEVEL V FROM DUAL CONNECT BY LEVEL <= 17); V X 1 1 2 1 3 1 4 1 3+1 = 4 : 몫에 나머지 값을 균등 배분 5 2 6 2 7 2 8 2 3+1 = 4 : 몫에 나머지 값을 균등 배분 9 3 10 3 11 3 17-8 = 9를 균등 배분 12 4 13 4 14 4 17-8 = 9를 균등 배분 15 5 16 5 17 5 17-8 = 9를 균등 배분 17/5 = 3 몫 : 나머지 2 몫에 나머지값을 균등 배분 3+1 = 4 3+1 = 4개씩 균등 배분 17-8 = 9를 균등 배분 즉 3개씩 배분 --------------------------------------------------------------------------------------------------- 레코드 : 21, NTITLE(5) SELECT V, NTILE(5) OVER(ORDER BY V) X FROM (SELECT LEVEL V FROM DUAL CONNECT BY LEVEL <= 21); V X 1 1 2 1 3 1 4 1 5 1 4+1 = 5 몫에 나머지 값을 균등 배분 6 2 7 2 8 2 9 2 21-5 = 16을 균등 배분 10 3 11 3 12 3 13 3 21-5 = 16을 균등 배분 14 4 15 4 16 4 17 4 21-5 = 16을 균등 배분 18 5 19 5 20 5 21 5 21-5 = 16을 균등 배분 21/5 = 4 몫 : 나머지 1 4+1 = 5개씩 균등 배분 21-5 = 16을 균등 배분 즉 4개씩 배분
728x90
반응형
'DB > Oracle' 카테고리의 다른 글
패키지 내에서 사용 테이블 정보 출력 (0) | 2018.02.15 |
---|---|
RATIO_TO_REPORT() (0) | 2018.02.15 |
오라클 쿼리실행 시간 체크 (0) | 2018.02.15 |
오라클 PIVOT/UNPIVOT (0) | 2018.02.15 |
오라클 rollup (0) | 2018.02.15 |