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

如何在SQL中计算指定固定参数下的有限级数累加和

你要实现的是首项为1、公比q=(1+r)/(1+W)的等比数列前k项求和,其中k=68-x,不需要编写循环逻辑,直接用等比数列求和公式即可实现,执行效率远高于循环方案。

方案1:等比数列公式实现(推荐)

等比数列求和公式为:S = (1 - q^k) / (1 - q),直接套入SQL即可:

固定r=0.2、W=0.4的场景

SELECT 
    *,
    (1 - POWER(6.0/7, 68 - x)) / (1 - 6.0/7) AS 求和结果
FROM data
WHERE x <= 68;

r、W从表字段动态取值的场景

SELECT 
    *,
    (1 - POWER((1.0 + r)/(1.0 + W), 68 - x)) / (1 - (1.0 + r)/(1.0 + W)) AS 求和结果
FROM data
WHERE x <= 68;

边界情况自动处理:当x=68时,68-x=0,q^0=1,分子为1-1=0,求和结果为0,符合循环不执行的预期。

方案2:递归CTE实现(适用于需要逐行验证计算过程的场景)

如果确实需要模拟循环累加逻辑,可以用递归公用表表达式实现:

WITH RECURSIVE sum_calculation AS (
    -- 初始项n=0
    SELECT 
        x, r, W,
        0 AS n,
        CASE WHEN 68 - x <= 0 THEN 0.0 ELSE 1.0 END AS cumulative_sum
    FROM data
    WHERE x <= 68
    UNION ALL
    -- 递归累加直到达到项数上限
    SELECT 
        x, r, W,
        n + 1 AS n,
        cumulative_sum + POWER((1.0 + r)/(1.0 + W), n + 1) AS cumulative_sum
    FROM sum_calculation
    WHERE n < 68 - x - 1
)
-- 取每个x对应的最终求和结果
SELECT x, r, W, cumulative_sum AS 求和结果
FROM sum_calculation
QUALIFY ROW_NUMBER() OVER (PARTITION BY x ORDER BY n DESC) = 1;

上述写法支持大部分主流数据库(MySQL 8.0+、PostgreSQL、SQL Server、Spark SQL等),低版本数据库可自行调整为对应窗口函数写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 23:33:01