我有2个像myslow一样的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
这可以在一个查询中实现吗?
答案 0 :(得分:4)
你想要的是一个为聚合提供日期魔法的联盟:
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
。在这里,我们通过将日期格式化为{{1}}的函数进行分组,因此它将获得您正在寻找的分区。