我有一个 Asterisk 13 PBX,它将队列日志转储到 MySQL,我正在尝试用它做一些基本报告 - 具体来说,按座席分割的调用的平均长度。
目前,我已经得到了这个,它可以工作,但不包含所有调用:
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
组合起来,然后获得组合数据的平均值,并按 代理
字段?
不幸的是,我无法真正改变应用程序的行为以使其存储数据更加一致。
最佳答案
使用 AVG
内的 IF
选择适当的列。
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
关于Mysql - 使用where子句获取两列的平均值,并按另一列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502008/