Oracle은 조건부 SUM 계산을 포함하여 조건부 집계를 위한 강력한 기능을 제공합니다. 이 문서에서는 특정 요구 사항에 따라 이러한 SUM을 수행하는 문제를 다룹니다. 즉, 15를 초과하면 누적 값을 재설정합니다.
문제 설명
목표는 다음을 계산하는 것입니다. 일련의 값에 대한 조건부 SUM. 여기서 SUM은 15에 도달하거나 초과할 때마다 0으로 재설정됩니다. 이 집계로 인해 임계값으로 분할된 일련의 SUM이 생성됩니다.
해결책: MODEL 절
재귀 SQL이 실행 가능한 접근 방식인 반면, SQL MODEL 절은 가독성을 높이고 실행 프로세스를 간소화하는 대안을 제공합니다.
<code class="sql">-- Create a table to represent the sample data CREATE TABLE test_data ( sort_col VARCHAR2(1), addend NUMBER ); -- Insert sample data INSERT INTO test_data (sort_col, addend) VALUES ('A', 3), ('B', 7), ('C', 6), ('D', 5), ('E', 9), ('F', 3), ('G', 8); -- Begin the actual solution WITH sorted_inputs AS ( SELECT sort_col, ROW_NUMBER() OVER (ORDER BY sort_col) AS sort_order, addend, 0 AS running_sum_max_15 -- Initialize running sum to zero 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], -- Set initial running sum to the first addend running_sum_max_15[sort_order > 1] = -- Calculate running sum for subsequent rows CASE WHEN running_sum_max_15[CV(sort_order) - 1] < 15 THEN running_sum_max_15[CV(sort_order) - 1] -- Continue running sum if below threshold ELSE 0 -- Reset running sum if threshold is reached or exceeded END + addend[CV(sort_order)] -- Add current addend to running sum );</code>
결과
쿼리 결과는 다음과 같습니다.
<code class="sql">+----------+--------+--------------------+ | 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 | +----------+--------+--------------------+</code>
조건부 SUM은 올바르게 계산되었으며 누적 합계는 15에 도달한 후 다시 시작됩니다.
위 내용은 재설정 임계값을 사용하여 Oracle에서 조건부 SUM을 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!