집 >데이터 베이스 >MySQL 튜토리얼 >누적 합계가 15를 초과하면 0으로 재설정되는 조건부 SUM을 Oracle에서 어떻게 구현할 수 있습니까?
Oracle의 조건부 SUM: 값이 15를 초과할 때 재설정
Oracle에서는 누적 합계를 수행해야 하지만 이를 제한해야 할 수도 있습니다. 최대 임계값까지. 예를 들어, 값이 15를 초과할 때마다 0으로 재설정되는 누계를 계산하려고 할 수 있습니다. 이를 조건부 SUM이라고 합니다.
이를 달성하는 한 가지 접근 방식은 재귀 SQL을 사용하는 것입니다. 정의된 조건에 따라 누적 합계를 반복적으로 업데이트할 수 있는 쿼리입니다. 그러나 대체 방법은 Oracle SQL MODEL 절을 활용하는 것입니다.
SQL MODEL 절은 구문이 약간 더 복잡하기는 하지만 더 읽기 쉬운 솔루션을 제공합니다. 입력 데이터를 기반으로 모델을 생성하면 누계 계산 방법을 제어하는 규칙을 지정할 수 있습니다.
SQL MODEL 절을 사용하여 이 조건부 SUM을 구현하려면:
RULES UPDATE 절을 사용하여 계산 규칙을 정의합니다.
이 쿼리의 출력은 15를 초과할 때마다 0으로 재설정되는 누계를 제공합니다.
예:
<code class="sql">WITH test_data (sort_col, addend) AS ( SELECT 'A', 3 FROM DUAL UNION ALL SELECT 'B', 7 FROM DUAL UNION ALL SELECT 'C', 6 FROM DUAL UNION ALL SELECT 'D', 5 FROM DUAL UNION ALL SELECT 'E', 9 FROM DUAL UNION ALL SELECT 'F', 3 FROM DUAL UNION ALL SELECT 'G', 8 FROM DUAL ), sorted_inputs (sort_col, sort_order, addend, running_sum_max_15) AS ( SELECT sort_col, row_number() OVER (ORDER BY sort_col) sort_order, addend, 0 FROM test_data ) SELECT sort_col, addend, running_sum_max_15 FROM sorted_inputs MODEL DIMENSION BY (sort_order) MEASURES (sort_col, addend, running_sum_max_15) RULES UPDATE ( running_sum_max_15[1] = addend[1], running_sum_max_15[sort_order > 1] = CASE WHEN running_sum_max_15[CV(sort_order) - 1] < 15 THEN running_sum_max_15[CV(sort_order) - 1] ELSE 0 END + addend[CV(sort_order)] );</code>
출력:
+----------+--------+--------------------+ | SORT_COL | ADDEND | RUNNING_SUM_MAX_15 | +----------+--------+--------------------+ | A | 3 | 3 | | B | 7 | 10 | | C | 6 | 16 | | D | 5 | 5 | | E | 9 | 14 | | F | 3 | 17 | | G | 8 | 8 | +----------+--------+--------------------+
위 내용은 누적 합계가 15를 초과하면 0으로 재설정되는 조건부 SUM을 Oracle에서 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!