그것은 분명하지 않다 : 처음에 나는 인수에 직접 하위 쿼리 수를했다 NTILE()
에 있지만 작동하지 않습니다. Oracle 구현에서는 지원되지 않습니다.
이 작동합니다 - 스콧 스키마에 EMP 테이블에서 테스트가 :
select empno, ename,
ntile (ceil(ct/4)) over (partition by ct order by empno) as n_tile
from emp cross join (select count(*) as ct from emp);
EMPNO ENAME N_TILE
---------- ---------- ----------
7369 SMITH 1
7499 ALLEN 1
7521 WARD 1
7566 JONES 1
7654 MARTIN 2
7698 BLAKE 2
7782 CLARK 2
7788 SCOTT 2
7839 KING 3
7844 TURNER 3
7876 ADAMS 3
7900 JAMES 4
7902 FORD 4
7934 MILLER 4
14 rows selected
따라서, 기본 테이블의 행 수를 별도로 수행해야하고 인 (크로스 조인을 사용 테이블 중 하나에 단 하나의 행이 있으므로).
그래서 :
select ..... , ntile (ceil(ct/25000)) over (partition by ct order by .....)
....
from <base_table> CROSS JOIN (select count(*) as ct from <base_table>)
NTILE이 (가) 실제로 원하는 것이 아닌 것 같습니다. 기존의 모든 목적은 모든 수의 레코드를 가져 와서 고정 된 크기의 청크 세트로 그룹화하는 것입니다. 귀하의 경우, 크기가 25k 행인 가변적 인 청크 집합이 필요합니다. ROW_NUMBER()에 대한 표현식을 사용하십시오. 'CEIL (ROW_NUMBER() OVER (ORDER BY id)/25000)' –