You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle中使用SELECT语句计算20到30之间数字的总和

Oracle数据库实现20-30区间数字求和的SQL方案

以下所有写法默认统计区间包含20和30两个边界值,最终计算结果均为275,可直接在Oracle环境执行。

方案1:等差数列公式直接计算(性能最优)

连续整数属于公差为1的等差数列,直接套用求和公式不需要遍历生成序列,不管区间跨度多大都能毫秒级返回结果,最适合大区间计算场景:

SELECT (20 + 30) * (30 - 20 + 1) / 2 AS sum_result
FROM dual;

注意:闭区间统计(同时包含首尾两个数字)时项数必须是末项-首项+1,漏写+1会少算一个边界值导致结果错误。

方案2:CONNECT BY层级查询生成序列求和(Oracle原生特性)

通过Oracle专属的层级语法生成20到30的连续数字序列,再调用SUM聚合函数求和,逻辑直观易修改,适合需要对生成的序列做额外过滤、加工的场景:

-- 简写版本
SELECT SUM(level + 19) AS sum_result
FROM dual
CONNECT BY level <= 30 - 20 + 1;
-- 可读性更好的嵌套版本
SELECT SUM(num) AS sum_result
FROM (
    SELECT 20 + (LEVEL - 1) AS num
    FROM dual
    CONNECT BY LEVEL <= 30 - 20 + 1
);

方案3:递归CTE写法(兼容通用SQL标准)

Oracle 11gR2及以上版本支持递归公用表表达式(CTE),写法符合ANSI SQL规范,如果后续需要迁移到其他支持递归CTE的数据库,修改成本极低:

WITH num_seq(n) AS (
    -- 锚点成员:定义区间起始值
    SELECT 20 AS n FROM dual
    UNION ALL
    -- 递归成员:每次+1直到达到区间结束值
    SELECT n + 1 FROM num_seq WHERE n < 30
)
SELECT SUM(n) AS sum_result
FROM num_seq;

使用说明

  • 上述所有写法默认统计闭区间结果,返回值均为275,和手动累加结果一致
  • 如果需要调整为开区间(比如不包含20、不包含30),只需要修改对应起始值、结束判断条件即可

内容的提问来源于stack exchange,提问作者shajin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:36:17