Heim >Datenbank >MySQL-Tutorial >Wie setze ich eine kumulative Summe in Oracle basierend auf einer Bedingung zurück?

Wie setze ich eine kumulative Summe in Oracle basierend auf einer Bedingung zurück?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-02 20:30:03571Durchsuche

How to Reset a Cumulative Sum in Oracle Based on a Condition?

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!

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