Mysql СУММА И ГРУППА BY из 3 таблиц - PullRequest
0 голосов
/ 18 марта 2020

У меня есть 3 таблицы базы данных:

проекты:

id

project_name

project_location

status

project_expenses

id

project_id

expense_category

expense_subcategory

amount

userid

date

payment_status

project_status

project_income

id

project_id

project_income

date

userid

project_status

projects.id, project_expenses.project_id и project_income.project_id связаны между собой.

Мне нужно создать запрос, отображающий Project_ID, Project_Name, SUM для Project_Income, SUM для Project_expenses

Я пробовал следующий запрос, но не получил правильного результата.

SELECT p.id AS id, p.project_name AS project_name, SUM(i.project_income) AS income, SUM(e.amount) AS expenses
FROM project_income i, project_expenses e, projects p
WHERE i.project_id = p.id AND e.project_id = p.id AND p.status = 'Active'
GROUP BY id

В настоящее время у меня есть 2 строки в project_income и 4 строки в project_expenses. Результатом является то, что project_income отображает двойные значения. Что-то не так с моим JOIN.

Будучи новичком ie Я не могу понять, что я делаю неправильно ?? Запрос помощи ...

1 Ответ

2 голосов
/ 18 марта 2020

Использовать вложенные элементы в столбцах результатов запроса. Нет необходимости в 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 раза больше желаемого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...