我有 5 张 table :
- service_agents 表
- 客户表
- clients_data 表(跟踪所有客户数据。每条数据都作为表中的另一行输入。因此,例如,如果客户有 2 个电话号码,则将有 2 行 - 使用连接(外键) ) client_id)。
- phone_call 表(跟踪电话调用,包括电话号码)
- phone_call_leg 表(跟踪电话调用的所有分支,包括 agent_id)
我想显示客服人员一天内调用客户超过 2 次的任何时间。这是我到目前为止所做到的:
SELECT
pcl.agent_id,
CONCAT( sa.first_name, ' ', sa.last_name ) AS 'Agent Name',
pc.remote_number,
COUNT( pcl.agent_id ) AS 'times_called'
FROM
phone_call_leg pcl
JOIN phone_call pc ON pcl.call_id = pc.id
JOIN service_agents sa ON sa.id = pcl.agent_id
GROUP BY
pcl.agent_id,
pc.remote_number
HAVING
times_called > 2
如果客服人员调用特定号码超过两次,则此查询将返回。但它不考虑两个号码是否属于同一客户。问题在于它没有捕获以下场景:代理调用其中一个号码一次,另一个号码两次,本质上总共调用客户 3 次。
问题:如何更改它以检查客户在clients_data表中是否有多个电话号码,然后查看代理是否调用了这些号码中的任何一个(即调用客户)超过两倍?
最佳答案
我不熟悉“电话腿”概念,但你不能通过 client_id 而不是号码进行 group_by 吗?
SELECT
COUNT(* ) AS 'times_called' ,
pcl.agent_id,
CONCAT( sa.first_name, ' ', sa.last_name ) AS 'Agent Name',
pc.remote_number
FROM
phone_call_leg pcl
JOIN phone_call pc ON pcl.call_id = pc.id
JOIN service_agents sa ON sa.id = pcl.agent_id
JOIN clients_data clid on clid.tel= pc.remote_number
JOIN clients cli on cli.id = clid.client_id
GROUP BY
pcl.agent_id,
cli.id
HAVING
times_called > 2;
关于MySQL 按客户而不是电话号码分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49029561/