Wil*_*ino 55 sql postgresql null aggregate-functions divide-by-zero
我想在SELECT子句中执行除法.当我连接一些表并使用聚合函数时,我经常使用null或零值作为分隔符.至于现在我只想出这种避免零和空值除法的方法.
(CASE(COALESCE(COUNT(column_name),1)) WHEN 0 THEN 1
ELSE (COALESCE(COUNT(column_name),1)) END)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法来做到这一点?
Yur*_*ter 162
您可以使用NULLIF函数,例如
something/NULLIF(column_name,0)
Run Code Online (Sandbox Code Playgroud)
如果值为column_name
0 - 整个表达式的结果将为NULL
Erw*_*ter 33
由于count()
永远不会返回NULL
(与其他聚合函数不同),您只需要捕获0
大小写(这是唯一有问题的情况):
CASE count(column_name)
WHEN 0 THEN 1
ELSE count(column_name)
END
Run Code Online (Sandbox Code Playgroud)
应该注意,除了之外
count
,这些函数在没有选择行时返回空值.
vol*_*ron 28
我意识到这是一个老问题,但另一个解决方案是利用最大的功能:
greatest( count(column_name), 1 ) -- NULL and 0 are valid argument values
Run Code Online (Sandbox Code Playgroud)
注意:
我的偏好是返回NULL,如在Erwin和Yuriy的答案中,或者通过检测值0
在除法运算之前和返回来逻辑地解决这个问题0
.否则,数据可能会被误用1
.
归档时间: |
|
查看次数: |
55229 次 |
最近记录: |