Oracle の条件付き SUM: 値が 15 を超えるとリセット
Oracle では、累積合計を実行する必要がある場合がありますが、それは制限されています。最大しきい値まで。たとえば、値 15 を超えるとゼロにリセットされる累計を計算したい場合があります。これは条件付き SUM と呼ばれます。
これを実現する 1 つのアプローチは、再帰 SQL を使用することです。クエリを使用すると、定義された条件に基づいて累計を繰り返し更新できます。ただし、別の方法として、Oracle SQL MODEL 句を利用する方法があります。
SQL MODEL 句は、構文が若干複雑になりますが、より読みやすいソリューションを提供します。入力データに基づいてモデルを作成することにより、累計の計算方法を制御するルールを指定できます。
SQL MODEL 句を使用してこの条件付き SUM を実装するには:
RULES UPDATE 句を使用して計算ルールを定義します。
このクエリの出力では、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 サイトの他の関連記事を参照してください。