查询在PostgreSQL中给出除零错误

AKI*_*WEB 11 sql postgresql percentage postgresql-9.2

我试图运行以下查询,这导致我 postgres error: division by zero

select 
    request_count,
    response_count, 
    (response_count*100) / (request_count+response_count) AS proportion 
from total_dummy_table; 
Run Code Online (Sandbox Code Playgroud)

如何避免和解决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
Run Code Online (Sandbox Code Playgroud)

请告诉我我在哪里做错了,或者我该如何解决这个问题.谢谢!

结果期望:

查询应该返回如下所示的内容:

Request_count | Response_count | Proportion

1603423       |  585706        | 36.52
Run Code Online (Sandbox Code Playgroud)

快速注释:表total_dummy_table没有列名proportion,该列名是结果的加法,其中计算了比例.

die*_*eke 23

使用NULLIF

something/NULLIF(column_name,0)
Run Code Online (Sandbox Code Playgroud)

NULLIF(col,val) 是简写

CASE WHEN col=val THEN NULL ELSE col
Run Code Online (Sandbox Code Playgroud)

  • 这应该被接受为正确答案。重复分母很乏味。特别是如果它是一个很大的表达,你会感到痛苦,就像@Houari 的回答一样重复整个分母 (3认同)
  • 我同意,这是更简洁的解决方案。编写 case 语句是不必要的,真正的答案是 Null 而不是 0。 (2认同)

Hou*_*ari 10

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;
Run Code Online (Sandbox Code Playgroud)