2

以前に次の質問をしました: SQL 内でパーセンテージを計算する

今、私は幸運にも素晴らしい答えを得ることができましたが、私の質問では、行にゼロが含まれる可能性があることを考慮していませんでした。

簡単な質問行:

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 を考慮に入れることができますか?

ところで。使用するデータベースは、PL SQL を使用した Oracle データベースです。

4

4 に答える 4

3
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
于 2012-12-07T12:58:15.990 に答える
3

除数がゼロの場合、このnullif関数を使用して null を返すことができます。SQL が null 除数に遭遇すると、式全体が強制的に 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'

null パーセンテージを除外する場合は、次の 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;
于 2012-12-07T12:59:04.273 に答える
2

あなたのコメントから私が理解している限りでは、100% の通話が応答されなかった日を含め、一定期間にわたって応答された通話の割合が必要です。

最も簡単なアプローチは

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

この場合。

于 2012-12-07T13:35:29.680 に答える
2

「Number_Of_Calls」がゼロになる可能性があることを意味していると思います(したがって、zero_divideエラーが発生しますか?)そうする場合

case Number_Of_Calls when 0 then 0 else ((Number_of_answered/Number_Of_Calls)*100) as answer_percent
于 2012-12-07T13:00:42.573 に答える