SQL: Sum(colA-colB) vs Sum(colA)-sum(colB)



Is:

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

同:

select sum(colA-colB) from Table

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

是的,它们是不同的:如果您的数据中有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。

一点也不。特别是,它们对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。

由于数字具有一定的范围,还可能出现其他细微的差异。例如,一种方法可能超出计算限制并产生错误。或者,小数位数可能存在差异。但NULL的处理通常是最大的区别。

最新更新