mysql选择数据,计算2个表和逐个月之间的数据

时间:2012-01-10 14:17:46

标签: mysql sql

我有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

这可以在一个查询中实现吗?

1 个答案:

答案 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以使计算正确。当然,我们可以为expensesum(x.income_amount, x.expense_amount)返回不同的列,然后在总和中对它们进行数学计算,例如*-1,但是如果可以,则无需执行此操作在点击sum之前,只需在列上快速group by

另一个重要的是Month, YYYY。在这里,我们通过将日期格式化为{{1}}的函数进行分组,因此它将获得您正在寻找的分区。