通过除以列的总和来查找列值
Posted
技术标签:
【中文标题】通过除以列的总和来查找列值【英文标题】:Find column Value by dividing with sum of a column 【发布时间】:2012-10-17 16:45:35 【问题描述】:我在 Netezza 数据库中有一个包含以下列的表
Id field1 field2
1 0.9 sum(field1)/0.9
2 1.7 sum(field1)/1.7
3 6.9 sum(field1)/6.9
4 0.4 sum(field1)/0.4
5 0.2 sum(field1)/0.2
6 2.8 sum(field1)/2.8
7 7.0 sum(field1)/7.0
field2
列将被生成,并将保存表中所示的值。
对于这个例子,field1
的总和是19.9
。
field1
的值也会经常变化。
请帮助计算field2
值的查询,这些值也是小数,因此需要精确的总和。
谢谢
【问题讨论】:
根据您的第二个数据样本,结果应该是什么样的? 【参考方案1】:你可以使用OUTER APPLY
:
select t1.id,
t1.field1,
(t2.field1 / t1.field1) field2
from table1 t1
outer apply
(
select sum(field1) field1
from table1
) t2
见SQL Fiddle with Demo
如果您无权访问outer apply
,那么您可以使用笛卡尔结果查询:
select t1.id,
t1.field1,
(t2.field1 / t1.field1) field2
from table1 t1,
(
select sum(field1) field1
from table1
) t2
见SQL Fiddle with Demo
【讨论】:
Netezza 不支持 OUTER APPLY 子句。【参考方案2】:您可以将SUM 与OVER Clause 一起使用。
select Id,
field1,
(sum(field1) over() / field1) as field2
from YourTable
SQLFiddle
【讨论】:
另外如何更改查询以进行以下计算 0.9/sum(field1) ? 嗨,Mikael,也请帮忙解决这个问题***.com/questions/13086194/…【参考方案3】:SELECT a.*, (b.totalSum / a.field1)
FROM table1 a
CROSS JOIN
(
SELECT SUM(filed1) totalSum
FROM tableName
) b
SQLFiddle Demo
【讨论】:
以上是关于通过除以列的总和来查找列值的主要内容,如果未能解决你的问题,请参考以下文章