首頁 > 資料庫 > mysql教程 > 如何在 Oracle 中使用重置閾值執行條件求和?

如何在 Oracle 中使用重置閾值執行條件求和?

DDD
發布: 2024-10-29 08:00:03
原創
274 人瀏覽過

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 時將其重設為零。所需的輸出應顯示為:

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 時將其重設為零。

以上是如何在 Oracle 中使用重置閾值執行條件求和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板