首頁 > 資料庫 > mysql教程 > 如何在 Oracle 中實現條件 SUM,當運行總計超過 15 時重設為零?

如何在 Oracle 中實現條件 SUM,當運行總計超過 15 時重設為零?

DDD
發布: 2024-10-29 11:46:02
原創
575 人瀏覽過

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

Oracle 上的條件SUM:值超過15 時重置

在Oracle 中,您可能會遇到需要執行累加求但對其進行限制的情況到最大閾值。例如,您可能想要計算一個運行總計,該總計在超過值 15 時重設為零。這稱為條件 SUM。

實現此目的的一種方法是使用遞歸 SQL查詢,它允許您根據定義的條件迭代更新運行總計。然而,另一種方法涉及利用 Oracle SQL MODEL 子句。

SQL MODEL 子句提供了更具可讀性的解決方案,儘管語法稍微複雜一些。透過基於輸入資料建立模型,您可以指定規則來控制運行總計的計算方式。

要使用 SQL MODEL 子句實現此條件 SUM:

  1. 定義一個CTE(通用表表達式)命名為sorted_inputs,用於按升序對輸入資料進行排序。
  2. 引入一個名為running_sum_max_15的欄位來追蹤運行總計,所有行都初始化為0。
  3. 使用 RULES UPDATE 子句定義計算規則:

    • 第一行,將 running_sum_max_15 設定為加數。
    • 對於後續行,檢查 running_sum_max_15 的先前值是否小於15. 如果為 true,則將當前加數加到其中;否則,將計數重設為 0 並添加當前加數。

此查詢的輸出將為您提供一個運行總計,只要超過 15,該總計就會重置為零。

範例:

<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 |
+----------+--------+--------------------+
登入後複製

以上是如何在 Oracle 中實現條件 SUM,當運行總計超過 15 時重設為零?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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