2014-03-05 67 views
4
给予除以零错误

我试图运行下面的查询,导致我postgres error: division by zero查询PostgreSQL中

select 
    request_count, 
    response_count, 
    (response_count*100)/(request_count+response_count) AS proportion 
from total_dummy_table; 

如何避免和解决division by zero错误?

试图修复使用下面的查询,但得到了同样的结果如上

SELECT 
    request_count, 
    response_count, 
    (response_count*100)/(request_count) AS proportion 
FROM 
    total_dummy_table 
ORDER BY 
    (response_count*100) /(CASE request_count WHEN 0 Then NULL ELSE request_count END) DESC NULLS FIRST 

请让我知道我做错了,或我怎么能解决这个问题。 谢谢!

结果的期望:

查询应该返回我的东西象下面这样:

Request_count | Response_count | Proportion 

1603423  | 585706  | 36.52 

快速注:表total_dummy_table没有列名proportion那就是除了其结果已经计算出它的比例。

+0

你想干什么显示,如果'+ REQUEST_COUNT是response_count'零? – Houari

+0

如果request_count和响应计数为0我希望比例列应该显示0. – AKIWEB

+0

在更高级别上执行此操作,请参阅我的答案以获得可能的解决方案... – hd1

回答

6
select request_count,response_count, 
case 
    when 
    request_count+response_count = 0 then 0 
    else 
(response_count*100)/(request_count+response_count) 
end AS proportion 
from total_dummy_table; 
+0

谢谢Hourari,快速提问并且非常笨拙 - 这里总计根据我的计数是request_count,其中有多少人回应是response_count。所以我的理解说总数必须只是request_count而不是它们的加法?正确?我只是好奇。 – AKIWEB

+0

这取决于你想要计算/显示什么。我的答案是为了避免零错误:) – Houari

+0

NULLIF是一个更合适的解决方案,以避免被零错误划分,也是一个更简单的解决方案。我建议来自diego的答案 –

10

使用NULLIF

something/NULLIF(column_name,0) 

NULLIF(col,val)是简写

CASE WHEN col=val THEN NULL ELSE col 
+0

这应该被接受为正确答案。它很难重复分母。特别是如果它是一个很大的表达方式,你会感受到重复整个分母的痛苦,正如@Houari的回答 – Rahul

+0

我同意,这是更简洁的解决方案。编码一个case语句是不必要的,真正的答案是Null不是0。 –