Sql 计算行可以包含0时的百分比

Sql 计算行可以包含0时的百分比,sql,database,oracle,calculated-columns,Sql,Database,Oracle,Calculated Columns,我曾提出以下问题: 现在我很幸运地得到了一个很好的答案,但是在我的问题中,我没有考虑到我的行可以包含零 问题行的位置很简单: 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' 但是,如果我们公司没有接听电

我曾提出以下问题:

现在我很幸运地得到了一个很好的答案,但是在我的问题中,我没有考虑到我的行可以包含零

问题行的位置很简单:

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'
但是,如果我们公司没有接听电话,那么接听电话的人数可能是零。因此,如果我想要以百分比表示的完整人数,我如何将0考虑在内


顺便说一下。我们使用的数据库是一个带有PL SQL的Oracle数据库,
nullif
函数可用于在除数为零时返回null。当SQL遇到空除数时,它会强制整个等式返回空,从而防止错误发生

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
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;

如果除数为零,则可以使用
nullif
函数返回null。当SQL遇到空除数时,它会强制整个等式返回空,从而防止错误发生

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;
我想你的意思是“调用的次数”可能是零(因此产生零除法错误?)

我想你的意思是“调用的次数”可能是零(因此产生零除法错误?)


据我从您的评论中了解,您希望在一段时间内接听电话的比率,包括100%电话无人接听的天数

我想最简单的方法是

select sum(number_of_answered) / sum (number_of_calls) 
  from table 
 where date between interval_start and interval_end

在这种情况下。

据我从您的评论中了解,您希望在一段时间内接听电话的比率,包括100%的电话无人接听的天数

我想最简单的方法是

select sum(number_of_answered) / sum (number_of_calls) 
  from table 
 where date between interval_start and interval_end

在这种情况下。

添加到where
和Number of of_answered>0
?如果您的回答数为零,则您的回答百分比为零,这有什么不对?@当然,我的陈述中有一个错误,假设是呼叫数/应答数加上
和应答数>0
?如果你的应答数为零,那么你的应答率为零,这有什么不对?@beherenow实际上我的陈述中有一个错误,假设是呼叫数/应答数。当我写这篇文章时,我得到了S1000(906)[Oracle][ODBC][Ora]Ora-00906:缺少左括号。您是否复制、粘贴或转录了答案?抄写的意思是输入的吗?我没有发现语法有任何问题,可以在我的db上执行类似的语句。下面是我在db中的语句:选择ANTAL_KALD,BESVARET_25_SEK,((ANTAL_KALD/nullif(BESVARET_25_SEK,0))*100)作为答案,从'2012-09-10'和'2012-09-11'之间的TIDSPUNKT表中选择TIDSPUNKT,Marcrasmusen优秀!干得好是否存在不包含空值的情况?比如说如果它为空,那么我不想得到那一行?当我写这篇文章时,我得到了S1000(906)[Oracle][ODBC][Ora]Ora-00906:缺少左括号您是否复制粘贴或转录答案?抄写的意思是输入的吗?我没有发现语法有任何问题,可以在我的db上执行类似的语句。下面是我在db中的语句:选择ANTAL_KALD,BESVARET_25_SEK,((ANTAL_KALD/nullif(BESVARET_25_SEK,0))*100)作为答案,从'2012-09-10'和'2012-09-11'之间的TIDSPUNKT表中选择TIDSPUNKT,Marcrasmusen优秀!干得好是否存在不包含空值的情况?比如说如果它为空,那么我不想得到那一行?