Sql 选择并按零除的Oracle视图问题
我想在Oracle中创建一个视图,用于计算“利用率百分比” 问题:有时sw.INSTALLED_端口或sw.MAX_installeble_端口可能为空(其他UTIL行也是如此) 有没有什么好的方法来做这样的事情:Sql 选择并按零除的Oracle视图问题,sql,oracle,null,view,Sql,Oracle,Null,View,我想在Oracle中创建一个视图,用于计算“利用率百分比” 问题:有时sw.INSTALLED_端口或sw.MAX_installeble_端口可能为空(其他UTIL行也是如此) 有没有什么好的方法来做这样的事情: if (sw.INSTALLED_PORTS or sw.MAX_INSTALLABLE_PORTS == null) UTIL_INSTALLABLE_PORTS = null else (sw.INSTALLED_PORTS/sw.MAX_INSTALLABLE_
if (sw.INSTALLED_PORTS or sw.MAX_INSTALLABLE_PORTS == null)
UTIL_INSTALLABLE_PORTS = null
else (sw.INSTALLED_PORTS/sw.MAX_INSTALLABLE_PORTS)*100 AS UTIL_INSTALLABLE_PORTS,
可以使用COALESCE()从其参数中返回第一个非null值,如:
(COALESCE(sw.INSTALLED_PORTS, 0)/COALESCE(sw.MAX_INSTALLABLE_PORTS,1))*100
AS UTIL_DEVICE_PORTS
请注意,我在分母中使用了1作为合并默认值,您不希望使用除法/0。按NULL除法与按零除法不同(正如您在标题中提到的问题)
从dual中选择1/null
=null从dual中选择null/null
=null
因此,通过(sw.INSTALLED\u PORTS/sw.MAX\u INSTALLED\u PORTS)*100
,您将自动获得所需
我认为,问题是当sw.MAX\u INSTALLABLE\u port
为零时。在这种情况下,您可以使用以下选项:
case
when sw.MAX_INSTALLABLE_PORTS = 0 then null
else (sw.INSTALLED_PORTS/sw.MAX_INSTALLABLE_PORTS)*100
end
或者再短一点:
sw.INSTALLED_PORTS/NULLIF(sw.MAX_INSTALLABLE_PORTS,0)
问候,,
罗伯。我认为这不是一回事。如果sw.INSTALLED_port或sw.MAX_INSTALLED_port为null,他希望UTIL_INSTALLED_port为null。对于以下情况,您的代码将返回0,但根据OP的代码,结果应为NULL:选择(COALESCE(NULL,0)/COALESCE(NULL,1))*100作为来自双端口的UTIL_设备_端口
case
when sw.MAX_INSTALLABLE_PORTS = 0 then null
else (sw.INSTALLED_PORTS/sw.MAX_INSTALLABLE_PORTS)*100
end
sw.INSTALLED_PORTS/NULLIF(sw.MAX_INSTALLABLE_PORTS,0)