MySQL按客户端而不是电话号码进行分组

问题描述 投票:0回答:1

我有5张桌子:

  1. service_agents表
  2. 客户表
  3. clients_data表(跟踪所有客户数据。每个数据作为表中的另一行输入。因此,如果客户端有2个电话号码,则会有2行 - 连接(外键)client_id) 。
  4. phone_call表(跟踪电话,包括电话号码)
  5. 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 

如果代理程序调用特定数字的次数超过两次,则此查询返回。但它没有考虑2个数字是否属于同一个客户端。问题是它没有捕获以下场景:代理一次调用其中一个号码而另一个号码调用两次,实质上是调用客户端共3次。

问题:如何更改它以检查客户端在clients_data表中是否有多个电话号码,然后查看代理是否将这些号码中的任何一个(即呼叫客户端)调用了两次以上?

mysql sql
1个回答
1
投票

我不熟悉“电话腿”概念,但你不能通过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;
© www.soinside.com 2019 - 2024. All rights reserved.