如果没有代表性数据进行测试的好处,我的猜测是加入的5个表格已将行数相乘,因此总数不正确。在COUNT()中使用DISTINCT可能会有所帮助,例如
SELECT
COUNT(DISTINCT calls.id)
+ COUNT(DISTINCT meetings.id)
+ COUNT(DISTINCT tasks.id) AS 'total'
, users.user_name AS 'name'
, GROUP_CONCAT(DISTINCT accounts.name) AS 'accounts'
FROM accounts
INNER JOIN calls ON accounts.id = calls.parent_id
INNER JOIN users ON calls.assigned_user_id = users.id
INNER JOIN meetings ON accounts.id = meetings.parent_id
AND meetings.assigned_user_id = users.id
INNER JOIN tasks ON accounts.id = tasks.parent_id
AND tasks.assigned_user_id = users.id
GROUP BY
users.user_name
;
注意我已经交换过的WHERE子句更现代的方式加盟的老样子,你真的应该加入。
另一种可能性是,你的罪名是不正确的,因为你使用的内部连接这要求两个表中的数据都存在用于返回行的数据。所以也许你需要一些LEFT OUTER JOIN。
SELECT
COUNT(DISTINCT calls.id)
+ COUNT(DISTINCT meetings.id)
+ COUNT(DISTINCT tasks.id) AS 'total'
, users.user_name AS 'name'
, GROUP_CONCAT(DISTINCT accounts.name) AS 'accounts'
FROM accounts
LEFT OUTER JOIN calls ON accounts.id = calls.parent_id
LEFT OUTER JOIN users ON calls.assigned_user_id = users.id
LEFT OUTER JOIN meetings ON accounts.id = meetings.parent_id
AND meetings.assigned_user_id = users.id
LEFT OUTER JOIN tasks ON accounts.id = tasks.parent_id
AND tasks.assigned_user_id = users.id
GROUP BY
users.user_name
;
最后的查询可能是一个混合的加入,某种内在的和有些人离开。
您能告诉我们一些样本数据和预期的输出吗? –
GROUP BY名称,accounts.name? – Mihai
总数如何不正确?你能向我们展示样本数据,以及你得到的结果是什么? – mjuarez