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

Ari*_*MAZ 17 sql-server performance

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

SUM(ISNULL(COL1,0))
Run Code Online (Sandbox Code Playgroud)

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

SUM(COL1)
Run Code Online (Sandbox Code Playgroud)

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

San*_*mar 15

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

你也可以这样使用.

ISNULL(SUM(COL1),0).

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

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

  • 正如我上面的回答中提到的。你不能。请参阅 - http://stackoverflow.com/questions/1088648/sql-sum-3-columns-when-one-column-has-a-null-value (2认同)

小智 6

在执行 SUM 时不强制使用 NULL 和 COALESCE,因为 SUM 总是忽略空值。

请参阅链接:https : //msdn.microsoft.com/en-IN/library/ms187810.aspx了解更多信息。

  • 正如@vohrahul 所指出的,除非**所有** 值为空,在这种情况下它会返回空值。 (2认同)

voh*_*hul 5

更新

如果在4列中有[1、2,NULL,5],则输出将为8。

但是,在许多情况下,不检查NULL而使用SUM()是不安全的。

如果给定子句没有匹配的内容,则可以接收null。而且,如果您在另一个函数中使用此SUMMED值,则可能需要关注。

此处有更多详细信息:https : //msdn.microsoft.com/zh-CN/library/ms187810.aspx

请同时查看COALESCE方法 https://msdn.microsoft.com/en-IN/library/ms190349.aspx

PS:也请查看此帖子- 我的选择SUM查询返回null。它应该返回0

这是3张图片,它们显示不检查NULL就会返回NULL而不是0。

与ISNULL CHECK的总和 在此处输入图片说明

没有ISNULL CHECK的SUM

在此处输入图片说明

含总和 在此处输入图片说明

  • 值得一提的是“ SELECT SUM(col1)+ SUM(col2)”的欺骗性情况-如果`col1`仅包含空值,即使`col2`包含值,它将返回`null`,因为`+`运算符返回`null如果它的任何操作数为null(我认为这就是ANSI标准所要求的)。这个答案应该获得更多的赞成票! (2认同)