[oracle] 백분율 오차제거
아래 구조의 테이블에서 RATE(백분율 퍼센트) 오차 0.1을 구하여 제일큰 비중을 차지한 비율에 오차만큼 더해준다.
이때, 같은 수치를 가진 비율에 대해서는 가장 큰 코드값을 구하여 더해준다.
CODE |
RATE |
1 |
40 |
2 |
40 |
3 |
19.9 |
SELECT
CODE
,RATE + (CASE WHEN CODE = (MAX(MAX_CODE) OVER()) THEN DIFF ELSE 0 END) RATE
FROM
(
SELECT
CODE
,RATE
,100 - SUM(RATE) OVER() AS DIFF
,(CASE WHEN (MAX(RATE) OVER()) = RATE THEN CODE END) MAX_CODE
FROM
(
SELECT '1' CODE, 40 RATE FROM DUAL
UNION ALL SELECT '2', 40 FROM DUAL
UNION ALL SELECT '3', 19.9 FROM DUAL
)
)
>> 결과데이터 <<
CODE |
RATE |
1 |
40 |
2 |
40.1 |
3 |
19.9 |
[출처] [oracle] 백분율 오차제거|작성자 사랑해u