通过除以列的总和来查找列值

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

【讨论】:

以上是关于通过除以列的总和来查找列值的主要内容,如果未能解决你的问题,请参考以下文章

基于R中其他列的列值总和[重复]

如何通过比较火花中相同列的两个数据帧来计算列值的数量

Django:分组然后通过查询计算列值的总和

在DataBind之后添加列值

如何通过读取shell脚本中的csv文件来将2列的总和添加到新列中

通过使用选择连接查询将 2 个列值相加来更新列值