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

时间:2018-02-28 12:25:31

标签: mysql sql

我有5张桌子:

  1. service_agents表
  2. clients table
  3. clients_data table(跟踪所有客户数据。每个数据作为表中的另一行输入。因此,如果客户端有2个电话号码,则会有2行 - 连接(外键) )client_id)。
  4. phone_call table(跟踪电话,包括电话号码)
  5. phone_call_leg table(跟踪电话的所有分支,包括agent_id)
  6. 我希望在座席每天呼叫客户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表中是否有多个电话号码,然后查看代理是否呼叫任何这些号码(即呼叫客户端)更多比两次?

1 个答案:

答案 0 :(得分: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;