这只是无数让我一直感到沮丧的小细节之一,迫使我记住各种特殊代码,并导致我的查询变得比应有的更难看。
尝试以下查询来获取大小:
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
,但对于这个问题,我将重点关注这一件事。