MySQL LEFT OUTER JOIN не дает правильного значения - PullRequest
0 голосов
/ 05 мая 2020

У меня есть следующие таблицы и отношения

enter image description here

Вот пример данных -

enter image description here

Я пробовал следующий запрос -

 SELECT project.*, SUM(schedule.amount) as sch_total, SUM(expense.amount) as expense_total, SUM(bill.amount) as bill_total from project 
LEFT OUTER JOIN schedule on project.project_id = schedule.project_id 
LEFT OUTER JOIN site on project.project_id = site.project_id 
LEFT OUTER JOIN expense on site.site_id = expense.site_id 
LEFT OUTER JOIN bill on site.site_id = bill.site_id 
GROUP BY project.project_id

Это результат запроса -

enter image description here

Но "bill_total" должно быть 200, а не 400. Что я пропустил в запросе?

1 Ответ

1 голос
/ 05 мая 2020

В вашей таблице расходов есть несколько строк с одним и тем же идентификатором. Эта таблица должна быть сначала агрегирована, а затем использована в объединении -

SELECT project.*,
       SUM(schedule.amount) as sch_total,
       SUM(E.amount) as expense_total,
       SUM(bill.amount) as bill_total
FROM project 
LEFT OUTER JOIN schedule on project.project_id = schedule.project_id 
LEFT OUTER JOIN site on project.project_id = site.project_id 
LEFT OUTER JOIN (SELECT site_id, SUM(expense.amount)amount
                   FROM expense 
                  GROUP BY site_id) E on site.site_id = expense.site_id 
LEFT OUTER JOIN bill on site.site_id = bill.site_id 
GROUP BY project.project_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...