오라클 ntile을 이용한 균등 배정하는 방법


실무를 하다 보면 배정 업무를 담당하게 되는 일들이 있습니다. 그런데 말이죠. 배정할때 조건들은 업무적으로 뭔가 균등하게 배정해야 한다는 점입니다. 예를 들어 직원들을 네개의 그룹으로 나누는데 연봉의 합은 최대한 비슷하게 균등 배정하려고 했을 때 다음과 같이 사용 할 수 있습니다.

SELECT
	xx
	, sum(sal) AS sum_sal
	, count(*) AS cnt
FROM (

	SELECT 
		empno
		, sal
		, x
		, ROW_NUMBER () over( PARTITION BY x ORDER BY CASE WHEN MOD(x, 2) = 1 THEN sal ELSE sal * -1 end desc) AS xx
	FROM (
		select 
			empno
			, ename
			, sal
			, NTILE(4) over (order by sal desc) as X
		from emp
	) t
)  GROUP BY xx
ORDER BY xx

출력 ) sal 수치 자체가 비슷하진 않지만 최대한 비슷한 구성으로 이루어짐.

XX SUM_SAL CNT
1 9,400 4
2 7,480 4
3 7,850 4
4 8,325 4

이것을 좀 활용하면 수치가 비슷한 그룹을 구성하는데 도움이 될 수 있습니다.



Written by@[namu]
모바일, 스마트폰, 금융, 재테크, 생활 정보 등