MySQL выбрать данные с расчетом между 2 таблицами и сгруппировать по месяцам - PullRequest
2 голосов
/ 10 января 2012

У меня есть 2 таблицы mysql, как показано ниже:

Table income                           Table expense
id  amount         date                id  amount         date
1   200         2011-12-10             1   100         2011-12-21
2   300         2011-12-14             2   150         2012-01-01
3   500         2012-01-05             2   200         2012-01-03

Я хочу получить данные следующим образом:

month              profit
december, 2011     400
january, 2012      150

Возможно ли это в одном запросе?

1 Ответ

4 голосов
/ 10 января 2012

То, что вы хотите, - это объединение с некоторой магией дат для агрегата:

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, поэтому она получит искомые деления.

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