首頁  >  文章  >  資料庫  >  如何在 Oracle 中使用重置閾值計算條件 SUM?

如何在 Oracle 中使用重置閾值計算條件 SUM?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-31 17:22:30955瀏覽

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

Oracle 資料庫中的條件 SUM

Oracle 為條件聚合提供了強大的功能,包括條件 SUM 計算。本文解決了執行此類 SUM 的挑戰,有一個特定要求:當累計值超過 15 時重置累計值。

問題陳述

目標是計算對一系列值進行條件求和,其中每當達到或超過 15 時,求和就會重置為零。此聚合會產生按閾值劃分的一系列求和。

解決方案:利用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 後重新達到15 後重新開始。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn