>데이터 베이스 >MySQL 튜토리얼 >누적 합계가 15를 초과하면 0으로 재설정되는 조건부 SUM을 Oracle에서 어떻게 구현할 수 있습니까?

누적 합계가 15를 초과하면 0으로 재설정되는 조건부 SUM을 Oracle에서 어떻게 구현할 수 있습니까?

DDD
DDD원래의
2024-10-29 11:46:02575검색

How can I implement a conditional SUM in Oracle that resets to zero when the running total exceeds 15?

Oracle의 조건부 SUM: 값이 15를 초과할 때 재설정

Oracle에서는 누적 합계를 수행해야 하지만 이를 제한해야 할 수도 있습니다. 최대 임계값까지. 예를 들어, 값이 15를 초과할 때마다 0으로 재설정되는 누계를 계산하려고 할 수 있습니다. 이를 조건부 SUM이라고 합니다.

이를 달성하는 한 가지 접근 방식은 재귀 SQL을 사용하는 것입니다. 정의된 조건에 따라 누적 합계를 반복적으로 업데이트할 수 있는 쿼리입니다. 그러나 대체 방법은 Oracle SQL MODEL 절을 활용하는 것입니다.

SQL MODEL 절은 구문이 약간 더 복잡하기는 하지만 더 읽기 쉬운 솔루션을 제공합니다. 입력 데이터를 기반으로 모델을 생성하면 누계 계산 방법을 제어하는 ​​규칙을 지정할 수 있습니다.

SQL MODEL 절을 사용하여 이 조건부 SUM을 구현하려면:

  1. 입력 데이터의 순위를 오름차순으로 지정하는 sorted_inputs라는 CTE(공통 테이블 표현식).
  2. running_sum_max_15라는 열을 도입하여 누적 합계를 추적하고 모든 행에 대해 0으로 초기화합니다.
  3. RULES UPDATE 절을 사용하여 계산 규칙을 ​​정의합니다.

    • 첫 번째 행의 경우 running_sum_max_15를 addend로 설정합니다.
    • 이후 행의 경우 running_sum_max_15의 이전 값이 다음보다 작은지 확인하세요. 15. true인 경우 현재 가수를 추가합니다. 그렇지 않으면 개수를 0으로 재설정하고 현재 가수를 추가합니다.

이 쿼리의 출력은 15를 초과할 때마다 0으로 재설정되는 누계를 제공합니다.

예:

<code class="sql">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
),
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)]
);</code>

출력:

+----------+--------+--------------------+
| 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으로 재설정되는 조건부 SUM을 Oracle에서 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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