2014-03-05 2 views
4
제로 오류로 부서를 제공

나는 division by zero 오류를 postgres error: division by zero쿼리 PostgreSQL을

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

이 어떻게 피할 수 나에게 결과를 다음 쿼리를 실행하고 해결하기 위해 노력하고 있어요?

은 아래의 쿼리를 사용하지만

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'가 0 인 경우 표시 무엇을 원하는가에 대한 속기? – 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

감사합니다. 나에 따르면 count는 request_count이며, 그 중 응답 한 사람의 수는 response_count입니다. 그래서 내 이해는 합계가 단지 request_count가되어야한다고 말합니다. 옳은? 나는 단지 궁금하다. – AKIWEB

+0

계산/표시 할 내용에 따라 다릅니다. 내 대답은 'divison by zero' 오류를 피하는 것이 었습니다. – 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 문을 코딩하는 것은 불필요하며 실제 대답은 0이 아닌 Null입니다. –