在 SQL 列上应用公式
Applying Formula on a SQL Column
假设我有一个数字列,我想对这些值应用一个重要的(不是求和或平均)公式。我将如何编写查询以获得所需的值。
举个例子,假设 Table 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;
这更详细地表示...
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
假设我有一个数字列,我想对这些值应用一个重要的(不是求和或平均)公式。我将如何编写查询以获得所需的值。
举个例子,假设 Table 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;
这更详细地表示...
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