mil*_*lan 10 sql postgresql aggregate-functions
我想将空结果集的聚合为0.我尝试了以下内容:
SELECT SUM(COALESCE(capacity, 0))
FROM objects
WHERE null IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
结果:
sum
-----
(1 row)
Run Code Online (Sandbox Code Playgroud)
子问题:上面的工作不会在Oracle中使用SUM(NVL(capacity, 0))
吗?
And*_*y M 10
在有关聚合函数的文档页面中:
应该注意,除了之外
count
,这些函数在没有选择行时返回空值.特别是,sum
没有行返回null,而不是正如人们所期望的那样.coalesce
必要时,该函数可用于将零替换为null.
所以,如果你想保证返回的值,适用COALESCE
于结果的SUM
,而不是它的参数:
SELECT COALESCE(SUM(capacity), 0) …
Run Code Online (Sandbox Code Playgroud)
至于Oracle'子问题',我在官方文档页面(特别是10.2)中找不到任何NULL的概念,但另外两个来源是明确的:
SUM([DISTINCT] n)
n的值的总和,忽略NULL
...如果在某些数字上创建了sum(),则忽略空值,如下例所示......
也就是说,您无需将NVL应用于capacity
.(但是,与COALESCE
PostgreSQL中一样,您可能希望将其应用于SUM
.)
问题是,聚合总是返回一行,即使没有聚合行(如查询中的情况).你总结了一个没有行的表达式.因此,您获得的空值.
试试这个:
select coalesce(sum(capacity),0)
from objects
where false;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11477 次 |
最近记录: |