正在聚合三个表,但在聚合操作中得到了错误的值

  • 本文关键字:操作 错误 三个 mysql sql
  • 更新时间 :
  • 英文 :


">员工";表

emp_id empName
1 ABC
2 xyx

您的查询中有一些拼写错误:

  • 考虑到当前输出,GROUP_CONCAT函数中的分隔符应该是逗号,而不是空格,尽管逗号是默认值,所以您确实可以省略该子句
  • 选择中的每个别名都需要它的来源表,只要这些字段名在您要加入的表中的多个表中使用即可
  • GROUP BY子句应该至少包含SELECT子句中未聚合的每个字段,以便具有潜在的正确输出

查询中的总体概念问题是联接将">员工";表的每一行客户端";表(导致聚合期间出现多行和更高的金额总和)。走出兔子洞的一种方法是在"兔子洞"上进行第一次聚集客户端";表(每个">emp_id"值有一行),然后与其他表连接。

SELECT emp.emp_id, 
emp.empName, 
cl.clientName, 
SUM(coll.Amount)
FROM      employee emp
LEFT JOIN (SELECT emp_id, 
GROUP_CONCAT(client.clientName 
ORDER BY client.id) AS clientName 
FROM client
GROUP BY emp_id) cl
ON cl.emp_id = emp.emp_id
LEFT JOIN (SELECT emp_id, Amount FROM collection) coll
ON coll.emp_id = emp.emp_id
GROUP BY emp.emp_id, 
emp.empName, 
cl.clientName

请在此处查看演示。

不管我的评论如何,这里有一个查询您想要的输出:

SELECT 
a.emp_id,
a.empName,
a.clientName,
SUM(col.Amount)  AS totalCollection
FROM (SELECT e.emp_id, 
e.`empName`, 
GROUP_CONCAT(DISTINCT c.clientName ORDER BY c.id ) AS clientName
FROM      employee e
LEFT JOIN `client` c
ON c.emp_id = e.emp_id
GROUP BY e.`emp_id`) a
LEFT JOIN collection col
ON col.emp_id = a.emp_id
GROUP BY col.emp_id;  

当有多个joins时,应该注意查询生成的关系和结果(行)数。输出中可能有多个记录,而不是所需的记录。希望这能帮助

SELECT emp_id, 
empName, 
GROUP_CONCAT(client.clientName ORDER BY client.id SEPARATOR '') AS clientName, 
C .Amount 
FROM      employee
LEFT JOIN client
ON clent.emp_id = employee.emp_id
LEFT JOIN (select collection.emp_id , sum(collection.Amount ) as Amount  from collection group by collection.emp_id) C
ON C.emp_id = employee.emp_id
GROUP BY employee.emp_id;

它现在对我有效

相关内容