У меня есть 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
поле?
К сожалению, я не могу изменить поведение приложения, чтобы он сохранял данные более последовательно.
Это похоже на то, что мне нужно, но на один последующий вопрос. Есть около десятка кодов событий, но эти четыре - те, о которых я забочусь. Могу ли я сделать вложенное, если в этом случае не испортить средний расчет? – csyria
Не уверен, что вы имеете в виду. Предложение 'WHERE' ограничивает это только этими 4. – Barmar
Я должен был попробовать это, прежде чем спрашивать! Раньше я пытался что-то с подзапросами, что заставило меня думать, что 'IF' внутри' AVG' будет вести себя по-другому. Просто проверено, отлично работает, принято в качестве ответа. Благодаря! – csyria