Bedingte Summierung in Oracle
In Oracle bezieht sich die bedingte Summierung auf die Durchführung einer kumulativen Summenoperation, während der akkumulierte Wert basierend auf einer angegebenen Bedingung zurückgesetzt wird . Mit dieser Technik können Sie Daten so manipulieren, dass die Summe bei Erreichen eines bestimmten Schwellenwerts auf einen bestimmten Wert zurückgesetzt wird.
Um dies zu erreichen, können Sie die SQL MODEL-Klausel nutzen. Mit dieser Klausel können Sie ein hierarchisches Datenmodell definieren und auf diesem Modell basierende Berechnungen angeben.
Betrachten Sie das folgende Beispiel, in dem Sie eine kumulative Summe berechnen möchten, die jedes Mal zurückgesetzt wird, wenn sie 15 überschreitet:
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)] )
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 |
Wie Sie sehen können, wird die laufende Summe auf 0 zurückgesetzt, nachdem 15 für die Zeilen „C“ und „F“ überschritten wurden. Dadurch können Sie eine bedingte Summierung basierend auf bestimmten Kriterien durchführen, die in Ihrer Abfrage definiert sind.
Das obige ist der detaillierte Inhalt vonWie setze ich eine kumulative Summe in Oracle basierend auf einer Bedingung zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!