Kla*_*ang 6 postgresql null database-design coalesce
这只是无数让我一直感到沮丧的小细节之一,迫使我记住各种特殊代码,并导致我的查询变得比应有的更难看。
尝试以下查询来获取大小:
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
,但对于这个问题,我将重点关注这一件事。
Phi*_* W. -1
如果它找不到 sum() 金额的记录,它将返回空/null/未定义而不是 0,导致我的应用程序中的输出意外为空,而不是零的“总和”。但 sum() 的意思是“总和”,那么为什么不直接返回 0呢?
仅仅是因为:
NULL != 0
Run Code Online (Sandbox Code Playgroud)
NULL 不是任何类型的默认值,也不是任何类型的已知值。这是有意记录任何有意义的价值缺失
的方式。
NULL 的总和为 NULL。任何
针对 NULL 的聚合函数
的结果都是 NULL。对 NULL进行任何操作的
结果都是 NULL。
这是一个“有趣”的:
NULL 不“等于”其他任何东西,甚至 NULL本身也不“等于” !
NULL is NULL True
NULL = NULL False
NULL != NULL False
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19154 次 |
最近记录: |