Oracle의 조건부 합산: 제한이 15를 초과할 때 값 재설정
Oracle에서는 조건부로 값을 합산해야 하는 시나리오가 발생할 수 있습니다. 특정 임계값에 도달하면 합계를 재설정합니다. 예를 들어 테이블에 다음과 같이 표현된 데이터가 있다고 가정합니다.
A | 3 | 3 B | 7 | 10 C | 6 | 16 -- ==== D | 5 | 5 E | 9 | 14 F | 3 | 17 -- ==== G | 8 | 8
목표: 값의 누적 합계를 계산하고 합계가 15를 초과할 때마다 이를 0으로 재설정하는 쿼리를 작성합니다.
SQL MODEL 절을 사용한 솔루션
이 문제에 대한 재귀 SQL의 대안은 SQL MODEL 절을 사용하는 것입니다. 구문은 더 복잡해 보일 수 있지만 경우에 따라 명확성을 제공할 수 있습니다.
-- Create a temporary table for demonstration purposes 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 ), -- Implementation of the conditional summation using MODEL clause 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)] )
결과:
+----------+--------+--------------------+ | 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으로 재설정합니다.
위 내용은 임계값 재설정을 통해 Oracle에서 조건부 합산을 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!