如何求连续乘法

2024-02-17

不确定这个标题是否正确。我需要找到cumulative multiplication就像跑步总计一样。

搜索了一下论坛,得到了很好的结果answer https://stackoverflow.com/questions/5416169/mutiplication-aggregate-operator-in-sql。但这对我来说不是确切的答案。

所以修改了我的要求的答案。

SELECT *,
       (SELECT CASE
                 WHEN Min(Abs(Column1)) = 0 THEN 0
                 ELSE Exp(Sum(Log(Abs(NULLIF(Column1, 0))))) -- the base mathematics
                      * Round(0.5 - Count(NULLIF(Sign(Sign(Column1) + 0.5), 1))%2, 0) -- pairs up negatives
               END
        FROM   TEMP a
        WHERE  B.ID >= A.ID) as  Running_Mul
FROM   TEMP B 

我得到了答案。现在有没有更好的方法来做到这一点Sql Server 2008?

样本数据:

ID  Column1 
--  -------
1   1       
2   2       
3   4       
4   8       
5   -2  

预期结果:

ID  Column1 Running_Mul
--  ------- -----------
1   1       1
2   2       2
3   4       8
4   8       64
5   -2      -128

sql小提琴 http://sqlfiddle.com/#!3/997fe/2


你的方法还是蛮合理的。很好的捕捉nullif() in the sum(), 顺便一提。虽然else clause is仅在之后计算then, else 的组成部分是在聚合期间计算的 - 所以log(0)会返回一个错误。

我认为有一些更简单的方法来计算符号,例如:

power(-1, sum(case when column1 < 0 then 1 else 0 end))

or:

(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)

然而,哪个版本“更简单”则是见仁见智的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何求连续乘法 的相关文章

随机推荐