【问题标题】:SQL: Sum(colA-colB) vs Sum(colA)-sum(colB)SQL:总和(colA-colB)与总和(colA)-总和(colB)
【发布时间】:2014-11-11 13:50:53
【问题描述】:

是:

select sum(colA)-sum(colB) from Table

同:

select sum(colA-colB) from Table

看起来是这样,但只是检查:)

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    是的,它们是不同的:如果您的数据中有 NULLs。考虑以下几点:

    DECLARE @TestTable TABLE (ID INT IDENTITY(1,1), ColA INT, ColB INT)
    INSERT INTO @TestTable (ColA, ColB) VALUES (5,2)
    INSERT INTO @TestTable (ColA, ColB) VALUES (5,NULL)
    INSERT INTO @TestTable (ColA, ColB) VALUES (NULL,2)
    
    
    SELECT SUM(ColA) - SUM(ColB) FROM @TestTable 
    SELECT SUM(ColA - ColB) FROM @TestTable
    

    第一个查询将返回 6 (10 - 4),而第二个查询将返回 3(5-2 加上 5-NULL 加上 NULL-2)。每次在直接计算中使用 NULL 值时,计算将返回 NULL。

    【讨论】:

      【解决方案2】:

      一点也不。特别是,它们处理 NULL 值的方式不同。所以,考虑一下:

      A     B
      1     NULL
      2     2
      NULL  2
      

      查询:

      select sum(colA) - sum(colB) 
      

      将返回 SUM(1, 2) - SUM(2, 2) = -1

      查询:

      select sum(colA - colB) 
      

      将返回 SUM(NULL, 2-2, NULL) = 0。

      由于数字具有范围,可能会出现其他细微的差异。例如,一种方法可能会超出计算限制并产生错误。或者,十进制数字可能存在差异。但对NULLs 的处理通常是最大的不同。

      【讨论】:

      • 在您的示例中,sum(colA - colB) 的结果不是 0 吗?
      • @ZoffDino 。 . .是的。谢谢。
      • @GordonLinoff 你的编辑对我来说没有意义。 (NULL + 4 + NULL) = 4 甚至 (NULL + 4 + NULL) = NULL 对我来说更有意义吗?
      • @Jonathan 。 . .那些不是 SQL +。它们是 SQL SUM()。显然是一个模棱两可的陈述,所以我想我做了一个调整以更清楚。
      • 好的,所以Sum(NULL + 4 + NULL) = 0 肯定不是Sum(NULL, 0, NULL) = 4?!
      猜你喜欢
      • 1970-01-01
      • 2021-04-29
      • 2021-08-19
      • 2020-06-08
      • 2015-07-26
      • 2015-12-12
      • 2016-05-06
      • 2011-08-08
      • 2022-11-27
      相关资源
      最近更新 更多