Oracle 上的条件 SUM:值超过 15 时重置
在 Oracle 中,您可能会遇到需要执行累加求和但对其进行限制的情况到最大阈值。例如,您可能想要计算一个运行总计,该总计在超过值 15 时重置为零。这称为条件 SUM。
实现此目的的一种方法是使用递归 SQL查询,它允许您根据定义的条件迭代更新运行总计。然而,另一种方法涉及利用 Oracle SQL MODEL 子句。
SQL MODEL 子句提供了更具可读性的解决方案,尽管语法稍微复杂一些。通过基于输入数据创建模型,您可以指定规则来控制运行总计的计算方式。
要使用 SQL MODEL 子句实现此条件 SUM:
使用 RULES UPDATE 子句定义计算规则:
此查询的输出将为您提供一个运行总计,只要超过 15,该总计就会重置为零。
示例:
<code class="sql">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)] );</code>
输出:
+----------+--------+--------------------+ | 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 | +----------+--------+--------------------+
以上是如何在 Oracle 中实现条件 SUM,当运行总计超过 15 时重置为零?的详细内容。更多信息请关注PHP中文网其他相关文章!