Home > Database > Mysql Tutorial > How to Perform Conditional Summation in Oracle with a Resetting Threshold?

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

Patricia Arquette
Release: 2024-10-29 18:53:30
Original
285 people have browsed it

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

Conditional SUMming in Oracle: Resetting Values When the Limit Exceeds 15

In Oracle, you may encounter scenarios where you need to conditionally sum values and reset the sum when it reaches a specific threshold. For instance, suppose you have data represented in a table as follows:

A | 3 | 3
B | 7 | 10
C | 6 | 16  -- ====
D | 5 | 5
E | 9 | 14
F | 3 | 17  -- ====
G | 8 | 8
Copy after login

Objective: Write a query that calculates the running sum of values, resetting it to zero whenever the sum exceeds 15.

Solution Using the SQL MODEL Clause

An alternative to recursive SQL for this problem is to employ the SQL MODEL clause. The syntax may seem more complex, but it can offer clarity in some cases:

-- 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)]
)
Copy after login

Results:

+----------+--------+--------------------+
| 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 |
+----------+--------+--------------------+
Copy after login

This query effectively performs the conditional summation, resetting the running sum to zero whenever it exceeds the threshold of 15.

The above is the detailed content of How to Perform Conditional Summation in Oracle with a Resetting Threshold?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template