Maison > Article > base de données > Comment effectuer une sommation conditionnelle dans Oracle avec un seuil de réinitialisation ?
SOMMATION conditionnelle dans Oracle : réinitialisation des valeurs lorsque la limite dépasse 15
Dans Oracle, vous pouvez rencontrer des scénarios dans lesquels vous devez additionner des valeurs de manière conditionnelle et réinitialisez la somme lorsqu'elle atteint un seuil spécifique. Par exemple, supposons que vos données soient représentées dans un tableau comme suit :
A | 3 | 3 B | 7 | 10 C | 6 | 16 -- ==== D | 5 | 5 E | 9 | 14 F | 3 | 17 -- ==== G | 8 | 8
Objectif : Écrivez une requête qui calcule la somme cumulée des valeurs, en la réinitialisant à zéro chaque fois que la somme dépasse 15.
Solution utilisant la clause SQL MODEL
Une alternative au SQL récursif pour ce problème consiste à utiliser la clause SQL MODEL. La syntaxe peut paraître plus complexe, mais elle peut offrir de la clarté dans certains cas :
-- Create a temporary table for demonstration purposes 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 ), -- Implementation of the conditional summation using MODEL clause 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)] )
Résultats :
+----------+--------+--------------------+ | 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 | +----------+--------+--------------------+
Cette requête effectue efficacement la sommation conditionnelle, remise à zéro du cumul à chaque fois qu'il 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!