【问题标题】: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 值的查询,这些值也是小数,因此需要精确的总和。

谢谢

【问题讨论】:

  • 根据您的第二个数据样本,结果应该是什么样的?

标签: sql sql-server-2005 netezza


【解决方案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】:

您可以将SUMOVER Clause 一起使用。

select Id,
       field1,
       (sum(field1) over() / field1) as field2
from YourTable

SQLFiddle

【讨论】:

【解决方案3】:
SELECT  a.*, (b.totalSum / a.field1)
FROM    table1 a
        CROSS JOIN
        (
            SELECT SUM(filed1) totalSum
            FROM tableName
        ) b

SQLFiddle Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多