Mysql - 使用where子句获取两列的平均值,并按另一列分组

标签 mysql

我有一个 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/

相关文章:

MySQL 在多个表上选择联接

mysql - 如何在 MySQL 中使用 REGEXP(或类似的)匹配特定的字符串模式

mysql - MySQL 中的 UPDATE ... WHERE 事务是否会锁定从子查询引用的其他表中的行?

php - 如何在mysql中编码西里尔文?

php - 上传不适用于 PHP-MySQL

python - 我可以在 sql 中使用 bson.objectid.ObjectId 作为(主键)id 吗?

c# - 是否可以使用异常来标记何时尝试进行重复的 SQL 插入?

mysql - 连接两个表并按两列分组

javascript - 将存储在 localStorage 中的 jQuery 可拖动位置保存到 MySQL

php - 如果 VAR 在 mySQL 数据库中,则返回该行数据作为变量 PHP