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) 
我想知道是否有更好的方法来做到这一点?
Yur*_*ter 162
您可以使用NULLIF函数,例如
something/NULLIF(column_name,0)
如果值为column_name0  - 整个表达式的结果将为NULL
Erw*_*ter 33
由于count()永远不会返回NULL(与其他聚合函数不同),您只需要捕获0大小写(这是唯一有问题的情况):
CASE count(column_name)
   WHEN 0 THEN 1
   ELSE count(column_name)
END
应该注意,除了之外
count,这些函数在没有选择行时返回空值.
vol*_*ron 28
我意识到这是一个老问题,但另一个解决方案是利用最大的功能:
greatest( count(column_name), 1 )  -- NULL and 0 are valid argument values
注意: 
我的偏好是返回NULL,如在Erwin和Yuriy的答案中,或者通过检测值0在除法运算之前和返回来逻辑地解决这个问题0.否则,数据可能会被误用1.
| 归档时间: | 
 | 
| 查看次数: | 55229 次 | 
| 最近记录: |