RATIO_TO_REPORT 함수의 범위가 0 초과 1 이하라고 되어있는데 현재 행의 값이 0이나 음수인 경우에는 어떻게 되는 건가요?
좋은 질문 감사합니다.
결론부터 말씀드리면, 교재에 적힌 '0 초과 1 이하'라는 범위는 그룹 내 모든 값이 양수일 때를 전제로 한 설명입니다.
RATIO_TO_REPORT(값)는 내부적으로 값 / SUM(값) OVER (파티션)으로 계산됩니다. 즉 현재 행의 값을 그룹 전체 합계로 나눈 비율이므로, 현재 행의 값이 0이거나 음수이면 결과 범위가 달라집니다.
현재 행의 값이 0인 경우 : 0 / 합계 = 0이 되어, '0 초과'가 아니라 0이 그대로 반환됩니다.
예) 값이 (0, 30, 70)이면 → 0/100 = 0
현재 행의 값이 음수인 경우 : 비율도 음수가 됩니다.
예) 값이 (-20, 40, 80)이면 → -20/100 = -0.2
더 나아가 양수와 음수가 섞여 합계가 작아지면 비율이 1을 초과할 수도 있습니다.
예) 값이 (120, -20)이면 → 120/100 = 1.2
정리하면, '0 초과 1 이하'는 그룹 내 모든 값이 양수인 일반적인 상황에서 성립하는 범위이며, 값에 0이나 음수가 포함되면 0, 음수, 심지어 1을 초과하는 결과도 나올 수 있습니다. 실무에서 RATIO_TO_REPORT는 매출·수량처럼 양수 데이터의 구성비(점유율)를 구할 때 주로 쓰이기 때문에 통상 그 범위로 설명하는 것입니다.
이런 이유 때문에 253 표에 통상 범위로 표시했습니다.
-
서*재2026-08-10 07:45:15
좋은 질문 감사합니다.
결론부터 말씀드리면, 교재에 적힌 '0 초과 1 이하'라는 범위는 그룹 내 모든 값이 양수일 때를 전제로 한 설명입니다.
RATIO_TO_REPORT(값)는 내부적으로 값 / SUM(값) OVER (파티션)으로 계산됩니다. 즉 현재 행의 값을 그룹 전체 합계로 나눈 비율이므로, 현재 행의 값이 0이거나 음수이면 결과 범위가 달라집니다.
현재 행의 값이 0인 경우 : 0 / 합계 = 0이 되어, '0 초과'가 아니라 0이 그대로 반환됩니다.
예) 값이 (0, 30, 70)이면 → 0/100 = 0
현재 행의 값이 음수인 경우 : 비율도 음수가 됩니다.
예) 값이 (-20, 40, 80)이면 → -20/100 = -0.2
더 나아가 양수와 음수가 섞여 합계가 작아지면 비율이 1을 초과할 수도 있습니다.
예) 값이 (120, -20)이면 → 120/100 = 1.2
정리하면, '0 초과 1 이하'는 그룹 내 모든 값이 양수인 일반적인 상황에서 성립하는 범위이며, 값에 0이나 음수가 포함되면 0, 음수, 심지어 1을 초과하는 결과도 나올 수 있습니다. 실무에서 RATIO_TO_REPORT는 매출·수량처럼 양수 데이터의 구성비(점유율)를 구할 때 주로 쓰이기 때문에 통상 그 범위로 설명하는 것입니다.
이런 이유 때문에 253 표에 통상 범위로 표시했습니다.