Heim  >  Artikel  >  Datenbank  >  Wie führt man in Oracle eine bedingte Summierung mit einem zurückgesetzten Schwellenwert durch?

Wie führt man in Oracle eine bedingte Summierung mit einem zurückgesetzten Schwellenwert durch?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-29 18:53:30174Durchsuche

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

Bedingtes SUMMEN in Oracle: Zurücksetzen von Werten, wenn der Grenzwert 15 überschreitet

In Oracle kann es vorkommen, dass Sie Werte bedingt summieren müssen und die Summe zurücksetzen, wenn sie einen bestimmten Schwellenwert erreicht. Angenommen, Sie haben Daten wie folgt in einer Tabelle dargestellt:

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

Ziel: Schreiben Sie eine Abfrage, die die laufende Summe der Werte berechnet und sie auf Null zurücksetzt, wenn die Summe 15 überschreitet.

Lösung mit der SQL MODEL-Klausel

Eine Alternative zu rekursivem SQL für dieses Problem ist die Verwendung der SQL MODEL-Klausel. Die Syntax mag komplexer erscheinen, kann aber in manchen Fällen Klarheit schaffen:

-- 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)]
)

Ergebnisse:

+----------+--------+--------------------+
| 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 |
+----------+--------+--------------------+

Diese Abfrage führt effektiv die bedingte Summierung durch, Zurücksetzen der laufenden Summe auf Null, wenn sie den Schwellenwert von 15 überschreitet.

Das obige ist der detaillierte Inhalt vonWie führt man in Oracle eine bedingte Summierung mit einem zurückgesetzten Schwellenwert durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn