Вы пытаетесь вычислить слишком много агрегатов в одном запросе.
Enita non sunt multiplicanda praeter Необходимость
(лат. «Сущности не умножаются сверх необходимости»)
Ваши таблицы B, C, D и E производятся Декартовы произведения друг против друга. Предположим,
данная строка в A соответствует:
- 3 строки в B
- 6 строк в C
- 4 строки в D
- 1 строка в E
Общее количество строк в результате составляет 3 * 6 * 4 * 1 = 72 строки. Таким образом, ваше count(c.id_user)
в 12 раз больше, чем должно быть, ваше sum(d.weight)
в 18 раз больше, чем должно быть и т. Д.
Самое простое средство - вычислить каждый из этих агрегатов в отдельном запросе:
SELECT a.id, a.name, COALESCE(b.is_bool, FALSE) AS is_bool
FROM TBL_A AS a LEFT JOIN TBL_B AS b ON (b.id_tbla = a.id)
WHERE a.id = 1;
SELECT a.id, COUNT(c.id_user) AS nb_views
FROM TBL_A AS a LEFT JOIN TBL_C AS c ON (c.id_tbla = a.id)
WHERE a.id = 1;
SELECT a.id, SUM(d.weight) AS total_weight,
FROM TBL_A AS a LEFT JOIN TBL_D AS d ON (d.id_tbla = a.id)
WHERE a.id = 1;
SELECT a.id, COUNT(DISTINCT e.id_user) AS distinct_users,
FROM TBL_A AS a LEFT JOIN TBL_E AS e
ON (e.name_tbla = a.name AND e.id_user = 1)
WHERE a.id = 1;