小编Kla*_*ang的帖子

当没有匹配记录时,为什么 SELECTing sum() 返回 null 而不是 0?

这只是无数让我一直感到沮丧的小细节之一,迫使我记住各种特殊代码,并导致我的查询变得比应有的更难看。

尝试以下查询来获取大小:

SELECT sum(amount) FROM table WHERE conditions;
Run Code Online (Sandbox Code Playgroud)

如果它找不到sum()该数量的记录,它将返回空/空/未定义而不是 0,导致我的应用程序中的输出意外为空,而不是零的“总和”。但是sum()意味着“总和”,那么为什么不直接返回 0呢?

我知道解决方案。你“简单地”做:

SELECT COALESCE(sum(amount), 0) FROM table WHERE conditions;
Run Code Online (Sandbox Code Playgroud)

现在即使没有记录也会返回0。但它很丑,而且用起来不再感觉“有趣”。并不是说数据库应该是一个“有趣的游戏”,但你知道我的意思:如果查询变得过于复杂/“丑陋”,那么使用它就不再令人满意,特别是如果你知道这必须是在各种地方重复出现,这不仅仅是一些晦涩难懂的、一次性的边缘案例。

让它表现成这样的背后的思考过程是什么?我还有许多与 相关的其他问题null,但对于这个问题,我将重点关注这一件事。

postgresql null database-design coalesce

6
推荐指数
2
解决办法
2万
查看次数

标签 统计

coalesce ×1

database-design ×1

null ×1

postgresql ×1