【发布时间】:2015-01-15 04:02:30
【问题描述】:
假设我有一个数值列,我想对这些值应用一个重要的(不是求和或平均)公式。我将如何编写查询以获得所需的值。
例如,假设表 T 有一个名为 number 的列,我想找到该数字倒数的乘积。
T.number
--------
1
2
3
4
5
我要获取值:
1/1 + 1/2 + 1/3 + 1/4 + 1/5
我如何做到这一点?我熟悉分组和聚合,但这里我不需要分组,而是直接应用公式。
【问题讨论】:
假设我有一个数值列,我想对这些值应用一个重要的(不是求和或平均)公式。我将如何编写查询以获得所需的值。
例如,假设表 T 有一个名为 number 的列,我想找到该数字倒数的乘积。
T.number
--------
1
2
3
4
5
我要获取值:
1/1 + 1/2 + 1/3 + 1/4 + 1/5
我如何做到这一点?我熟悉分组和聚合,但这里我不需要分组,而是直接应用公式。
【问题讨论】:
您的公式是倒数的总和。你会这样做:
select sum(1.0 / t.number)
from t;
不幸的是,大多数数据库不支持product 函数。您可以通过获取日志并添加它们然后反转日志来做到这一点。具体功能因数据库而异,但大致如下:
select exp(sum(log(1.0 / t.number)))
from t;
【讨论】:
sqrt();如果不是,那么pow() 或power()。
这是更精细的表示...
DECLARE @TempTbl TABLE
(
Num DECIMAL(10,2)
)
INSERT INTO @TempTbl(Num) VALUES(1)
INSERT INTO @TempTbl(Num) VALUES(2)
INSERT INTO @TempTbl(Num) VALUES(3)
INSERT INTO @TempTbl(Num) VALUES(4)
INSERT INTO @TempTbl(Num) VALUES(5)
SELECT SUM(1.0/Num) FROM @TempTbl
【讨论】: