2015-12-28 2 views
0

У меня есть PBX Asterisk 13, которая сбрасывает queue_log в MySQL, и я пытаюсь сделать от нее основную отчетность - в частности, средняя длина вызовов, разбитых агентом.Mysql - получить среднее значение из двух столбцов с предложением where, сгруппированным по другому столбцу

В настоящее время у меня есть это, который работает, но не содержит все вызовы:

SELECT `asterisk`.`queue_log`.`agent`, count(`asterisk`.`queue_log`.`event`) AS 'calls_taken', AVG(`asterisk`.`queue_log`.`data2`) AS 'aht' 
FROM `asterisk`.`queue_log` 
WHERE `asterisk`.`queue_log`.`event` IN ("COMPLETEAGENT", "COMPLETECALLER") AND 
      `time` BETWEEN '2015-12-27' AND '2015-12-28' 
GROUP BY `agent` 
ORDER BY `agent` ASC 

Проблема у меня в том, что есть и другие коды событий (​​«BLINDTRANSFER», «ATTENDEDTRANSFER "), которые хранят соответствующие данные в столбце data4 вместо data2.

Как я могу в основном объединить data2 для некоторых событий, и data4 для других событий, а затем получить в среднем объединенных данных, сгруппированных по agent поле?

К сожалению, я не могу изменить поведение приложения, чтобы он сохранял данные более последовательно.

ответ

1

Используйте IF внутри AVG, чтобы выбрать соответствующий столбец.

SELECT agent, count(event) AS 'calls_taken', 
    AVG(IF(event in ("COMPLETEAGENT", "COMPLETECALLER") , data2, data4)) AS 'aht' 
FROM asterisk.queue_log 
WHERE event IN ("COMPLETEAGENT", "COMPLETECALLER", "BLINDTRANSFER", "ATTENDEDTRANSFER") AND 
      time BETWEEN '2015-12-27' AND '2015-12-28' 
GROUP BY agent 
ORDER BY agent ASC 
+0

Это похоже на то, что мне нужно, но на один последующий вопрос. Есть около десятка кодов событий, но эти четыре - те, о которых я забочусь. Могу ли я сделать вложенное, если в этом случае не испортить средний расчет? – csyria

+0

Не уверен, что вы имеете в виду. Предложение 'WHERE' ограничивает это только этими 4. – Barmar

+0

Я должен был попробовать это, прежде чем спрашивать! Раньше я пытался что-то с подзапросами, что заставило меня думать, что 'IF' внутри' AVG' будет вести себя по-другому. Просто проверено, отлично работает, принято в качестве ответа. Благодаря! – csyria

Смежные вопросы