【问题标题】:Why would SUM(COL1 + COL2) and SUM(COL1) + SUM(COL2) yield differently?为什么 SUM(COL1 + COL2) 和 SUM(COL1) + SUM(COL2) 会产生不同的结果?
【发布时间】:2014-09-21 22:06:56
【问题描述】:

这是一个相当奇怪的结果。我希望这些具有相同的产量。

下面还有从数据库中提取的 excel 链接。 https://twentius.opendrive.com/files?89038281_muoyg

编辑:用于 SUM 的列有 NULL 单元格。

【问题讨论】:

  • 我的直接想法是四舍五入。浮点值是近似值,在许多算术运算中,这些近似值可以很快加起来。不同的操作顺序会导致不同的结果。
  • 我不认为它会四舍五入。影响应该非常小,并且这些值以浮点数相加,因此不应该发生四舍五入。
  • 对不起,Jes,但浮点正是舍入可以快速加起来的地方,即使 0.1 也不能用浮点值精确表示。您链接数据库的快速总和完全给出了另一个值(大约 200 万):显然还有更多的事情发生。

标签: sql sql-server tsql aggregate-functions aggregation


【解决方案1】:

可能有一些NULL 值。 NULL + 1NULL。而SUM 过滤掉NULL 值。

您可以使用ISNULL(JAN, 0) + ISNULL(FEB, 0) + ... 来解决此问题。

【讨论】:

    【解决方案2】:

    几乎可以肯定是NULL 值:

    declare @t table (Col1 int,Col2 int)
    insert into @t(Col1,Col2) values
    (1,3),
    (5,7),
    (9,NULL)
    
    select SUM(Col1+Col2),SUM(Col1)+SUM(Col2) from @t
    

    生产:

    ----------- -----------
    16          25
    

    【讨论】:

    • 我认为你是对的。 SUM(Col1 + Col2) 忽略具有 NULL 值的行,但 SUM(Col1) + SUM(Col2) 只是忽略具有 NULL 值的单元格。 +1 用于演示。非常感谢。 :)
    【解决方案3】:

    是因为null,试试这个(我用的是Damien给出的例子)

    从@t中选择 sum(isnull(col1,0)+isnull(col2,0))

    【讨论】:

      猜你喜欢
      • 2016-08-12
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多