在 SQL 中计算有限和?

Posted

技术标签:

【中文标题】在 SQL 中计算有限和?【英文标题】:Calculating Finite Sum in SQL? 【发布时间】:2021-10-11 02:23:51 【问题描述】:

我正在尝试找出一种在 SQL 中计算以下内容的方法:

其中 r 和 W 分别是静态的 (0.2 , 0.4)。 x 与年龄相似,从不超过 68。

我的数据库有 x、r 和 W 列,其中 x 对于每个观察结果都不同。

我最初的想法是一个 while 循环,但我无法构造一个 while 循环,它的作用类似于:

select * , 0 as n

while n < 68 - (x + 1)
begin
    (POWER((1 + r) / (1 + W)) , n)
    set n = n + 1
end

from data

希望上面的伪代码说明了我正在尝试实现的内容。

提前致谢!

【问题讨论】:

请注明您的数据库管理系统的版本。 请分享一些示例数据和所需的输出。 使用存储函数应该很容易,但这看起来如何取决于 rdbms... 我正在使用 SQL Server Management Studio,如果有帮助的话 这是一个前端,但它表明你使用的是 SQL Server,但是哪个版本...试试SELECT @@version 【参考方案1】:

不需要循环。你的总和(给定 r,w,x)是

(POWER( (1+r)/(1+w), 68-x)-1)/( (1+r)/(1+w) - 1)

除非

(1+r)/(1+w) == 1

在这种情况下,总和是 68-x

如果我们写

c = (1+r)/(1+w) and 
N = 68-x

然后

(c-1)*Sum 0<=n<N | pow(c,n)
= c*Sum 0<=n<N | pow(c,n) - Sum 0<=n<N | pow(c,n)
= Sum 0<=n<N | pow( c, n+1) - Sum 0<=n<N | pow(c,n)
= Sum 1<=n<=N | pow( c, n) - Sum 0<=n<N | pow(c,n)
= pow( C, N) - 1 (as all the other terms cancel)

【讨论】:

以上是关于在 SQL 中计算有限和?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 开发任务超 50% !滴滴实时计算的演进与优化

使用Blink SQL+UDAF实现差值聚合计算

数据的分组与计算

SQL Server计算Jaccard系数—sim(i,j)

计算从一种状态到另一种状态需要多少天:SQL

2020年上半年总结