Bedingte SUMME in Oracle
Bei der Arbeit mit numerischen Daten in Oracle ist es oft notwendig, bedingte Berechnungen basierend auf bestimmten Kriterien durchzuführen. Eine dieser Anforderungen besteht darin, eine SUM-Operation auszuführen, jedoch mit der Bedingung, dass die Summe zurückgesetzt wird, nachdem sie einen bestimmten Schwellenwert überschreitet.
Problem:
Beachten Sie die folgende Datentabelle :
A | B |
---|---|
3 | 7 |
7 | 10 |
6 | 16 |
5 | 5 |
9 | 14 |
3 | 17 |
8 | 8 |
Das Ziel besteht darin, eine SUM-Operation für Spalte „B“ durchzuführen, die Summe jedoch immer dann auf Null zurückzusetzen, wenn sie einen Wert von 15 überschreitet. Die gewünschte Ausgabe sollte wie folgt aussehen:
A | B | Sum |
---|---|---|
3 | 3 | 3 |
7 | 10 | 10 |
6 | 16 | 16 |
5 | 5 | 5 |
9 | 14 | 14 |
3 | 17 | 17 |
8 | 8 | 8 |
Lösung 1: Rekursives 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;
Lösung 2: SQL MODEL-Klausel
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;
Beide Lösungen sind effektiv die bedingte SUM-Operation, die die Summe auf Null zurücksetzt, wenn sie den Schwellenwert von 15 überschreitet.
Das obige ist der detaillierte Inhalt vonWie führe ich in Oracle eine bedingte SUM mit einem zurückgesetzten Schwellenwert durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!