实现一组价值观的产品的最佳方式是什么?
select Col1, multiple(V) -- returns v1*v2*...*vn
from Table
group by Col1
实现一组价值观的产品的最佳方式是什么?
select Col1, multiple(V) -- returns v1*v2*...*vn
from Table
group by Col1
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()
然后SUM()
这些结果,它就相当于将每个值相乘然后将结果传递给LOG()
。
最后,EXP()
对 执行SUM()
以反转LOG()
。
虽然有一些规定可以正常工作......例如每个值都必须大于零。