Использовать вложенные элементы в столбцах результатов запроса. Нет необходимости в GROUP BY
.
SELECT p.id
, p.project_name
, ( SELECT SUM(i.project_income)
FROM project_income i
WHERE i.project_id = p.id
) AS income
, ( SELECT SUM(e.amount)
FROM project_expenses e
WHERE e.project_id = p.id
) AS expenses
FROM projects p
WHERE p.status = 'Active'
Проблема с запросом в вопросе лучше всего поясняется на примере.
Вы говорите, что в project_income
есть 2 строки и 4 строки в project_expenses
. Допустим, 2 дохода составляют 1000 и 1500, а 4 - 615, 750, 840 и 900.
Поскольку между ними нет ограничений, это означает, что вы получите перекрестное соединение, т.е. 8 записи:
income expense
1000 615
1000 750
1000 840
1000 900
1500 615
1500 750
1500 840
1500 900
Теперь, когда вы суммируете income
, вы получаете в 4 раза больше желаемого значения, а при суммировании расходов вы получаете в 2 раза больше желаемого значения.