>데이터 베이스 >MySQL 튜토리얼 >임계값 재설정을 사용하여 Oracle에서 조건부 SUM을 수행하는 방법은 무엇입니까?

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

DDD
DDD원래의
2024-10-29 08:00:03245검색

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

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

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