分组和多个所有值?

时间:2013-03-18 20:21:10

标签: sql-server sql-server-2008 tsql

实施一组价值观产品的最佳方式是什么?

select Col1, multiple(V) -- returns v1*v2*...*vn
from Table
group by Col1

1 个答案:

答案 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()

虽然有一些规定可以正常工作......例如每个值必须大于零。