임계값 재설정을 통해 Oracle에서 조건부 합산을 수행하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-29 18:53:30
원래의
226명이 탐색했습니다.

How to Perform Conditional Summation in Oracle with a Resetting Threshold?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿