Maison >base de données >tutoriel mysql >Comment réinitialiser une somme cumulée dans Oracle en fonction d'une condition ?
Somme conditionnelle dans Oracle
Dans Oracle, la sommation conditionnelle fait référence à l'exécution d'une opération de somme cumulative tout en réinitialisant la valeur accumulée en fonction d'une condition spécifiée . Cette technique vous permet de manipuler les données de manière à ce que la somme soit réinitialisée à une valeur spécifique lorsqu'un certain seuil est atteint.
Pour y parvenir, vous pouvez exploiter la clause SQL MODEL. Cette clause vous permet de définir un modèle de données hiérarchique et de spécifier des calculs basés sur ce modèle.
Considérez l'exemple suivant dans lequel vous souhaitez calculer une somme cumulée qui se réinitialise à chaque fois qu'elle dépasse 15 :
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)] )
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 |
Comme vous pouvez le constater, la somme cumulée se réinitialise à 0 après avoir dépassé 15 pour les lignes « C » et « F ». Cela vous permet d'effectuer une sommation conditionnelle basée sur des critères spécifiques définis dans votre requête.
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!