Oracle의 조건부 SUM
Oracle에서 숫자 데이터로 작업할 때 특정 기준에 따라 조건부 계산을 수행해야 하는 경우가 많습니다. 그러한 요구 사항 중 하나는 SUM 연산을 실행하는 것이지만 특정 임계값을 초과한 후 합계를 재설정하는 조건이 있는 것입니다.
문제:
다음 데이터 테이블을 고려하십시오. :
A | B |
---|---|
3 | 7 |
7 | 10 |
6 | 16 |
5 | 5 |
9 | 14 |
3 | 17 |
8 | 8 |
목표는 'B' 열에서 SUM 연산을 수행하지만 값이 15를 초과할 때마다 합계를 0으로 재설정하는 것입니다. 원하는 출력은 다음과 같이 표시되어야 합니다.
A | B | Sum |
---|---|---|
3 | 3 | 3 |
7 | 10 | 10 |
6 | 16 | 16 |
5 | 5 | 5 |
9 | 14 | 14 |
3 | 17 | 17 |
8 | 8 | 8 |
솔루션 1: 재귀 SQL
WITH recursive_sums AS ( SELECT A, B, B AS SUM_VALUE FROM data_table UNION ALL SELECT A, B, CASE WHEN SUM_VALUE + B < 15 THEN SUM_VALUE + B ELSE 0 END AS SUM_VALUE FROM recursive_sums WHERE A < (SELECT MAX(A) FROM data_table) ) SELECT A, B, SUM_VALUE AS Sum FROM recursive_sums ORDER BY A;
솔루션 2: SQL MODEL 절
WITH sorted_inputs AS ( SELECT A, ROW_NUMBER() OVER (ORDER BY A) AS sort_order, B, 0 AS running_sum_max_15 FROM data_table ), sorted_results AS ( SELECT A, B, running_sum_max_15 FROM sorted_inputs MODEL DIMENSION BY (sort_order) MEASURES (A, B, running_sum_max_15) RULES UPDATE ( running_sum_max_15[1] = B[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 + B[CV(sort_order)] ) ) SELECT A, B, running_sum_max_15 AS Sum FROM sorted_results ORDER BY A;
두 솔루션 모두 효과적으로 수행됩니다. 조건부 SUM 연산, 임계값 15를 초과할 때마다 합계를 0으로 재설정합니다.
위 내용은 임계값 재설정을 사용하여 Oracle에서 조건부 SUM을 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!