我正在尝试SP的性能。我对SUM和ISNULL有一个疑问。当我总结一列时,我应该使用ISNULL吗?没有ISNULL使用SUM()是安全的吗?我的例子在下面
SUM(ISNULL(COL1,0))
由于ISNULL成本很高,我打算在没有ISNULL的情况下使用SUM,如下所示
SUM(COL1)
我做了一些小测试但我看不到结果
答案 0 :(得分:12)
是的,这是安全的。您可以使用Sum而不处理NULL值。你也可以检查一下。
你也可以这样使用。
ISNULL(SUM(COL1),0)。
返回表达式中所有值或仅DISTINCT值的总和。 SUM只能与数字列一起使用。空值被忽略。
答案 1 :(得分:4)
<强>更新强>
如果4列中有[1,2,NULL,5],则输出为8。
但是,在许多情况下使用SUM()而不检查NULLS是不安全的。
当给定子句没有匹配的内容时,您可以收到null。如果您在另一个函数中使用此SUMMED值,那么这可能是一个值得关注的问题。
此处有更多详情:https://msdn.microsoft.com/en-GB/library/ms187810.aspx
请同时查看COALESCE方法 https://msdn.microsoft.com/en-IN/library/ms190349.aspx
PS:另请查看此帖子 - My Select SUM query returns null. It should return 0
这里有3个图像显示没有检查NULL,它返回NULL而不是0。
没有ISNULL CHECK的SUM
答案 2 :(得分:3)
在执行SUM时不必使用NULL和COALESCE,因为SUM始终忽略空值。
有关详细信息,请参阅链接:https://msdn.microsoft.com/en-IN/library/ms187810.aspx。
答案 3 :(得分:1)
最好在SUM聚合之前使用COALESCE方法。