>  기사  >  데이터 베이스  >  재설정 임계값을 사용하여 Oracle에서 조건부 SUM을 계산하는 방법은 무엇입니까?

재설정 임계값을 사용하여 Oracle에서 조건부 SUM을 계산하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-31 17:22:30958검색

How to Calculate a Conditional SUM in Oracle with a Reset Threshold?

Oracle 데이터베이스의 조건부 SUM

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.