哪个最正确 - 合并(sum(value))OR sum(coalesce(value))?

sib*_*ert 5 sql

我已经看到了这两个,但我想知道是否有一个"最佳实践"或优势来合并之前或之后的总和:

coalesce(sum(value),0)  OR  sum(coalesce(value),0)
Run Code Online (Sandbox Code Playgroud)

只是好奇...

小智 12

他们不做同样的事情.COALESCE如果没有记录,放入内部不会做任何事情.将它放在外面会改变结果0.使用哪个取决于您想要的结果.


jue*_*n d 7

无论如何,SQL引擎可能会优化它,但使用

coalesce(sum(value),0) 
Run Code Online (Sandbox Code Playgroud)

因为可以在不需要处理函数的情况下完成求和,并且最后coalesce调用一次,所以可以更快一些.

secone版本调用coalesce 每条记录,0如果null求和中有值,则将值设置为.

  • 至少在 PostgreSQL 中,如果“sum()”命中任何“null”,只要还有其他非“null”值需要求和,它就已经将它们视为 0。对于上面提到的@hvd 的情况,你仍然需要外部的“coalesce”(全部为空)。 (2认同)