1

これが私のmysqlクエリです

    SELECT IntervalStartTime,IFNULL(SUM(AbandonedCalls),0) AS AbandonedCallSum,SUM(QueueTime) AS QTS,SUM(RingTime) AS RTS,
IFNULL(SUM(AnsweredCalls),0) AS AnsweredCallSum
FROM intervalqueuestatistics
WHERE CallCenterId=17 AND DATE_FORMAT(IntervalStartTime,'%m')=10 AND DATE_FORMAT(IntervalStartTime,'%Y')=2012
GROUP BY DATE_FORMAT(IntervalStartTime,'%d');

今私は値を計算したい(SUM(QueueTime)+SUM(RingTime))/SUM(AnsweredCalls)

だから私は以下のようにそれに応じて私のクエリを修正しました

    SELECT IntervalStartTime,IFNULL(SUM(AbandonedCalls),0) AS AbandonedCallSum,SUM(QueueTime) AS QTS,SUM(RingTime) AS RTS,
IFNULL(SUM(AnsweredCalls),0) AS AnsweredCallSum,IFNULL(SUM(QueueTime),0) + IFNULL(SUM(RingTime),0)/IFNULL(SUM(AnsweredCalls),0)
FROM intervalqueuestatistics
WHERE CallCenterId=17 AND DATE_FORMAT(IntervalStartTime,'%m')=10 AND DATE_FORMAT(IntervalStartTime,'%Y')=2012
GROUP BY DATE_FORMAT(IntervalStartTime,'%d');

しかし、実行すると、正しい答えが得られません。

たとえば、このクエリによって返される行の 1 つ

 QTS    RTS   AnsweredCallSum CalculatedField 
188000  41645        9          192627.222

しかし、CalculatedField は間違っています。上記の計算によると、25516.11 である必要があります。

4

2 に答える 2

1

SUM(AnsweredCalls) が 0 の場合、0 で除算しているため、機能しません。

于 2012-12-10T14:27:19.663 に答える
0

これは私の推測です:

  1. null列が存在する場合にIFNULL(..., 1)除算しないように使用します。0
  2. 操作の順序が失敗しないように、明示的に括弧を使用します。(あなたは現在、あなたが望んでいたと思うsum1 + (sum2 / sum3)ときに演奏しています)。かっこなしで加算と減算の前に乗算と除算が来ることを忘れないでください。(sum1 + sum2) / sum3

( IFNULL(SUM(QueueTime), 0) + IFNULL(SUM(RingTime), 0) )
        / IFNULL(SUM(AnsweredCalls), 1)
于 2012-12-10T14:32:06.260 に答える