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

标签 mysql sql

我有 5 张 table :

  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 

如果客服人员调用特定号码超过两次,则此查询将返回。但它不考虑两个号码是否属于同一客户。问题在于它没有捕获以下场景:代理调用其中一个号码一次,另一个号码两次,本质上总共调用客户 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/

相关文章:

sql - 强制 LINQ to SQL 或 ENTITIES 发出 BETWEEN 运算符

MySQL 在单个列中返回多个行值

php - (PHP MYSQLI) 使用 SELECT OR 时出现奇怪的 'No index used' 错误

MySQL varchar timestamp 列存储两种不同的方式

sql - 附加两个 SQLite-DB 文件以在 Swift 中查询这两个文件

sql - 将 fetchXML 转换为 sql 临时表

mysql特殊字符编码问题

php - laravel 中的查询返回空响应

php - 如何使用 distinct + 获取每个数据的总和从字符串中获取不同的数据

mysql - 如何获取mysql中每个用户出现次数最多的行