Без возможности иметь репрезентативные данные для проверки, я предполагаю, что объединение 5 таблиц умножило строки и, следовательно, итоговые значения были неверными из-за этого. Использование DISTINCT внутри COUNT() может помочь, например.
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
;
Примечание я сменил старый способ соединения через ИНЕК для более современного подхода, вы действительно должны присоединиться.
Другой возможность заключается в том, что ваши счетчики неверны, потому что вы используете ВНУТРЕННИЙ JOINS которые требуют наличия данных в обеих таблицах для возвращаемых строк. Так что, может быть, вам понадобятся некоторые ЛЕВЫЕ ВНЕШНИЕ СОБЫТИЯ.
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
;
Окончательный запрос может представлять собой смесь объединений, некоторые INNER и некоторые LEFT.
Можете ли вы показать нам пример данных и ожидаемый результат? –
GROUP BY имя, accounts.name? – Mihai
Какое значение Общее Не верно? Можете ли вы показать нам образцы данных и какие результаты вы получаете? – mjuarez