实施一组价值观产品的最佳方式是什么?
select Col1, multiple(V) -- returns v1*v2*...*vn
from Table
group by Col1
答案 0 :(得分:3)
You can fake a product()
aggregate function by doing the following:
SELECT Col1, EXP(SUM(LOG(V)))
FROM Table
GROUP BY Col1
为什么这样做?
采用以下示例:
DECLARE @x INT, @y INT
SET @x = 7
SET @y = 8
-- Both return 4.02535
PRINT LOG(@x * @y)
PRINT LOG(@x) + LOG(@y)
-- Both return 56.
PRINT EXP(LOG(@x) + LOG(@y))
PRINT @x * @y
因此对于对数LOG(x * y) = LOG(x) + LOG(y)
...因为我们有一个SUM()
函数但缺少PRODUCT()
函数,如果我们将每个值传递给LOG()
然后{ {1}}这些结果,相当于将每个值相乘,然后将结果传递给SUM()
。
最后,针对LOG()
执行EXP()
以反转SUM()
。
虽然有一些规定可以正常工作......例如每个值必须大于零。