То, что вы хотите, - это объединение с некоторой магией дат для агрегата:
select
date_format(x.date, '%M %Y') as `month`,
sum(amount) as profit
from
(select amount, date
from income
union all
select amount*-1 as amount, date
from expense
) x
group by
date_format(x.date, '%M %Y')
Здесь мы используем конкретную вещь date_format
, чтобы получить даты.мы хотим этогоКроме того, мы умножаем amount
на -1
, когда оно получается из expense
, чтобы сделать расчет правильным.Конечно, мы могли бы вернуть разные столбцы для income
и expense
, а затем вычислить их в сумме, например, sum(x.income_amount, x.expense_amount)
, но нет необходимости делать это, когда вы можете просто быстро выполнить *-1
до столбца, прежде чем он достигнет sum
.
Другая важная вещь - group by
.Здесь мы группируем по функции, которая форматирует дату как Month, YYYY
, поэтому она получит искомые деления.