首页 > 数据库 > mysql教程 > 如何在 Oracle 中使用重置阈值执行条件求和?

如何在 Oracle 中使用重置阈值执行条件求和?

DDD
发布: 2024-10-29 08:00:03
原创
245 人浏览过

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

Oracle 中的条件 SUM

在 Oracle 中处理数值数据时,通常需要根据某些条件执行条件计算。其中一个要求是执行 SUM 运算,但条件是在总和超过特定阈值后重置总和。

问题:

考虑以下数据表:

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

目标是对“B”列执行 SUM 运算,但每当总和超过值 15 时将其重置为零。所需的输出应显示为:

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

解决方案 1:递归 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;
登录后复制

解决方案 2:SQL MODEL 子句

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;
登录后复制

这两种解决方案都有效执行条件 SUM 运算,每当总和超过阈值 15 时将其重置为零。

以上是如何在 Oracle 中使用重置阈值执行条件求和?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板