ホームページ  >  記事  >  データベース  >  Oracle でしきい値をリセットして条件付き合計を実行する方法

Oracle でしきい値をリセットして条件付き合計を実行する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-29 18:53:30174ブラウズ

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

Oracle での条件付き合計: 制限が 15 を超えた場合の値のリセット

Oracle では、条件付きで値を合計する必要があるシナリオが発生する場合があります。合計が特定のしきい値に達するとリセットされます。たとえば、次のようにテーブルで表されたデータがあるとします。

A | 3 | 3
B | 7 | 10
C | 6 | 16  -- ====
D | 5 | 5
E | 9 | 14
F | 3 | 17  -- ====
G | 8 | 8

目的: 値の累計を計算し、合計が 15 を超えるとゼロにリセットするクエリを作成します。

SQL MODEL 句を使用した解決策

この問題に対する再帰 SQL の代替案は、SQL MODEL 句を使用することです。構文はより複雑に見えるかもしれませんが、場合によっては明確にすることができます。

-- Create a temporary table for demonstration purposes
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 ),

-- Implementation of the conditional summation using MODEL clause
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)]
)

結果:

+----------+--------+--------------------+
| 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 を超えると、累計がゼロにリセットされます。

以上がOracle でしきい値をリセットして条件付き合計を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。