ホームページ > データベース > mysql チュートリアル > 現在の合計が 15 を超えるとゼロにリセットされる条件付き SUM を Oracle に実装するにはどうすればよいですか?

現在の合計が 15 を超えるとゼロにリセットされる条件付き SUM を Oracle に実装するにはどうすればよいですか?

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 と呼ばれます。

これを実現する 1 つのアプローチは、再帰 SQL を使用することです。クエリを使用すると、定義された条件に基づいて累計を繰り返し更新できます。ただし、別の方法として、Oracle SQL MODEL 句を利用する方法があります。

SQL MODEL 句は、構文が若干複雑になりますが、より読みやすいソリューションを提供します。入力データに基づいてモデルを作成することにより、累計の計算方法を制御するルールを指定できます。

SQL MODEL 句を使用してこの条件付き SUM を実装するには:

  1. 入力データを昇順でランク付けするために、sorted_inputs という名前の CTE (共通テーブル式) を使用します。
  2. ランニング合計を追跡するために、running_sum_max_15 という名前の列を導入し、すべての行で 0 に初期化されます。
  3. RULES UPDATE 句を使用して計算ルールを定義します。

    • 最初の行では、running_sum_max_15 を addend に設定します。
    • 後続の行では、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 |
+----------+--------+--------------------+
ログイン後にコピー

以上が現在の合計が 15 を超えるとゼロにリセットされる条件付き SUM を Oracle に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート