没有ISNULL()使用SUM()是否安全

时间:2016-05-18 09:22:32

标签: sql-server performance

我正在尝试SP的性能。我对SUM和ISNULL有一个疑问。当我总结一列时,我应该使用ISNULL吗?没有ISNULL使用SUM()是安全的吗?我的例子在下面

SUM(ISNULL(COL1,0))

由于ISNULL成本很高,我打算在没有ISNULL的情况下使用SUM,如下所示

SUM(COL1)

我做了一些小测试但我看不到结果

4 个答案:

答案 0 :(得分:12)

是的,这是安全的。您可以使用Sum而不处理NULL值。你也可以检查一下。

你也可以这样使用。

ISNULL(SUM(COL1),0)。

返回表达式中所有值或仅DISTINCT值的总和。 SUM只能与数字列一起使用。空值被忽略。

供参考:https://msdn.microsoft.com/en-IN/library/ms187810.aspx

答案 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修改 enter image description here

没有ISNULL CHECK的SUM

enter image description here

与COALESCE的结论 enter image description here

答案 2 :(得分:3)

在执行SUM时不必使用NULL和COALESCE,因为SUM始终忽略空值。

有关详细信息,请参阅链接:https://msdn.microsoft.com/en-IN/library/ms187810.aspx

答案 3 :(得分:1)

最好在SUM聚合之前使用COALESCE方法。