2012-12-07 52 views
1

计算百分比我以前提出以下问题:Calculating percentage within the SQL当行可以包含0

现在,我很幸运,在我的问题我没有考虑到我行可能包含零但是得到一个伟大的答案。

的问题,排在那里简单:

select 
Number_of_Calls, 
Number_of_Answered, 
((Number_of_answered/Number_Of_Calls)*100) as answer_percent, 
Date 
from table Where Date BETWEEN '2012-09-10' AND '2012-09-11' 

然而Number_of_answered可能是零(如果公司没有接听电话),所以如果我想在个完整的电话号码我如何采取0到帐户?

顺便说一句。我们使用的数据库是SQL PL

+0

添加到“AND Number_of_answered> 0”? – Kosta

+0

如果您的答案数量为零,那么您的答案百分比为零,那有什么问题? –

+0

@beherenow其实我的声明中有一个错误,它假设为Number_of_calls/Number_of_answered –

回答

1

Oracle数据库的nullif功能可用于返回null如果除数为零。当SQL遇到空分隔符时,它会强制整个方程返回null,从而防止发生错误。

select 
Number_of_Calls, 
Number_of_Answered, 
((Number_of_answered/nullif(Number_Of_Calls,0))*100) as answer_percent, 
Date 
from table Where Date BETWEEN '2012-09-10' AND '2012-09-11' 

如果你想排除空比例使用下面的SQL:

select * from(select 
    Number_of_Calls, 
    Number_of_Answered, 
    ((Number_of_answered/nullif(Number_Of_Calls,0))*100) as answer_percent, 
    Date 
    from table Where Date BETWEEN '2012-09-10' AND '2012-09-11') alias 
where answer_percent is not null; 
+0

当我写这个时,我得到S1000(906)[Oracle] [ODBC] [Ora] ORA-00906:丢失左括号 –

+0

您是否复制并粘贴或转录答案?转录的意思输入在?我没有看到任何语法问题,可以在我的db上执行类似的语句。 –

+0

这是我在我的数据库语句:选择 ANTAL_KALD, BESVARET_25_SEK, ((ANTAL_KALD/NULLIF(BESVARET_25_SEK,0))* 100)answer_percent, TIDSPUNKT 从表在哪里TIDSPUNKT BETWEEN '2012年9月10日' AND '2012-09-11' –

2
Case when Number_Of_Calls = 0 
    THEN 0 --or your desired value, maybe 100 
    else (Number_of_answered/Number_Of_Calls)*100 
END as answer_percent 
1

我想你的意思是“Number_Of_Calls”可能是零(从而提高一个ZERO_DIVIDE误差?)如果是这样做

case Number_Of_Calls when 0 then 0 else ((Number_of_answered/Number_Of_Calls)*100) as answer_percent 
1

据我了解你的评论,你希望在一段时间内接听电话的比率,包括100%电话没有答案的时间。

我猜simpliest的做法是

select sum(number_of_answered)/sum (number_of_calls) 
    from table 
where date between interval_start and interval_end 
在这种情况下