【发布时间】:2014-11-11 13:50:53
【问题描述】:
是:
select sum(colA)-sum(colB) from Table
同:
select sum(colA-colB) from Table
看起来是这样,但只是检查:)
【问题讨论】:
标签: sql sql-server
是:
select sum(colA)-sum(colB) from Table
同:
select sum(colA-colB) from Table
看起来是这样,但只是检查:)
【问题讨论】:
标签: sql sql-server
是的,它们是不同的:如果您的数据中有 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。
由于数字具有范围,可能会出现其他细微的差异。例如,一种方法可能会超出计算限制并产生错误。或者,十进制数字可能存在差异。但对NULLs 的处理通常是最大的不同。
【讨论】:
sum(colA - colB) 的结果不是 0 吗?
(NULL + 4 + NULL) = 4 甚至 (NULL + 4 + NULL) = NULL 对我来说更有意义吗?
+。它们是 SQL SUM()。显然是一个模棱两可的陈述,所以我想我做了一个调整以更清楚。
Sum(NULL + 4 + NULL) = 0 肯定不是Sum(NULL, 0, NULL) = 4?!