Mysql СУММА И Группировка из нескольких таблиц, но только с определенными данными - 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, Difference

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

SELECT p.id AS id, p.project_name AS 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,
(SELECT (income - expenses)) AS difference
FROM projects p
WHERE p.status = 'Active'

НО некоторые " проекты без каких-либо доходов и расходов " также перечислены. Мне нужно отображать только те проекты с расходами и доходами.

Как это возможно. Запрос помощи ...

1 Ответ

1 голос
/ 18 марта 2020
SELECT projects.id AS id, 
       projects.project_name AS project_name, 
       SUM(totals.income) income, 
       SUM(totals.expenses) expenses,
       SUM(totals.income) - SUM(totals.expenses) difference
FROM ( SELECT SUM(project_income) income,
              0 expenses,
              project_id
       FROM project_income i
       GROUP BY project_id
     UNION ALL
       SELECT 0,
              SUM(e.amount),
              project_id
       FROM project_expenses e
       GROUP BY project_id ) totals
JOIN projects ON totals.project_id = projects.id
WHERE projects.status = 'Active'
GROUP BY projects.id, 
         projects.project_name

Будут перечислены только те проекты, которые имеют хотя бы один доход и / или расходы.

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