Maison >base de données >tutoriel mysql >Comment effectuer une SOMME conditionnelle dans Oracle avec un seuil de réinitialisation ?

Comment effectuer une SOMME conditionnelle dans Oracle avec un seuil de réinitialisation ?

DDD
DDDoriginal
2024-10-29 08:00:03297parcourir

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

SOMME conditionnelle dans Oracle

Lorsque vous travaillez avec des données numériques dans Oracle, il devient souvent nécessaire d'effectuer des calculs conditionnels basés sur certains critères. L'une de ces exigences consiste à exécuter une opération SUM, mais avec une condition pour réinitialiser la somme après qu'elle dépasse un seuil spécifique.

Problème :

Considérez le tableau de données suivant :

A B
3 7
7 10
6 16
5 5
9 14
3 17
8 8

L'objectif est d'effectuer une opération SOMME sur la colonne 'B', mais de remettre la somme à zéro chaque fois qu'elle dépasse une valeur de 15. Le résultat souhaité doit apparaître comme :

A B Sum
3 3 3
7 10 10
6 16 16
5 5 5
9 14 14
3 17 17
8 8 8

Solution 1 : SQL récursif

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;

Solution 2 : Clause de modèle SQL

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;

Ces deux solutions fonctionnent efficacement l'opération SOMME conditionnelle, remettant la somme à zéro chaque fois qu'elle dépasse le seuil de 15.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn