gpt4 book ai didi

sql - 如何找到运行乘法

转载 作者:行者123 更新时间:2023-12-02 01:41:23 24 4
gpt4 key购买 nike

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

搜索论坛并得到了一个很好的answer .但这不是我的确切答案。

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

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 Fiddle

最佳答案

你的方法很合理。顺便说一下,sum() 中的 nullif() 很不错。尽管 else 子句仅在 then 之后计算,else 的组成部分是在聚合过程中计算的——所以 log(0 ) 会返回一个错误。

我觉得有一些更简单的方法来计算符号,比如:

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

或:

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

不过,哪个版本“更简单”,见仁见智。

关于sql - 如何找到运行乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28409884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com