ホームページ > データベース > mysql チュートリアル > Oracle でしきい値をリセットして条件付き SUM を実行するにはどうすればよいですか?

Oracle でしきい値をリセットして条件付き SUM を実行するにはどうすればよいですか?

DDD
リリース: 2024-10-29 08:00:03
オリジナル
272 人が閲覧しました

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

Oracle の条件付き SUM

Oracle で数値データを操作する場合、多くの場合、特定の基準に基づいて条件付き計算を実行する必要があります。このような要件の 1 つは、SUM 操作を実行することですが、特定のしきい値を超えた後に合計をリセットするという条件があります。

問題:

次のデータ テーブルを考えてみましょう。 :

A B
3 7
7 10
6 16
5 5
9 14
3 17
8 8

目的は、列 'B' で SUM 演算を実行しますが、値が 15 を超えると常に合計を 0 にリセットすることです。目的の出力は次のように表示されます。

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 でしきい値をリセットして条件付き SUM を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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