Heim > Datenbank > MySQL-Tutorial > Wie führe ich in Oracle eine bedingte SUM mit einem zurückgesetzten Schwellenwert durch?

Wie führe ich in Oracle eine bedingte SUM mit einem zurückgesetzten Schwellenwert durch?

DDD
Freigeben: 2024-10-29 08:00:03
Original
240 Leute haben es durchsucht

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

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage