我必须在mysql中表收入和支出。
收入表
sn
i_type
u_id
year
month
inc_amount
费用表
sn
e_type
u_id
year
month
exp_amount
我想加入上面的两个表来计算收入总和,每月和每年的费用总和。我写了以下查询:
select income.year,income.month,sum(income.inc_amount),sum(expense.exp_amount)
from income,expense
where income.u_id=expense.u_id, income.year=expense.year,income.month=expense.month
group by income.year,income.month
避免查询显示金额的笛卡尔和。即如果收入表中有特定u_id,年,月的三条记录,则同一个u_id,年,月的记录有2条。它给出了收入金额的总和是实际金额的2倍,因为第一个收入表的1个记录与两个费用表记录相结合。同样,由于第二张表的每张记录与第一张表中的3张记录相结合,费用金额之和为3倍。
答案 0 :(得分:1)
您可以对两个表使用UNION,然后获取聚合。
select ie.year, ie.month, sum(ie.inc_amount), sum(ie.exp_amount)
from
(
select year, month, inc_amount, 0 as exp_amount from income
UNION
select year, month, 0 as inc_amount, exp_amount from expense
) ie
group by ie.year, ie.month
注意我已经在每个表上添加了一个额外字段,其值为0,只是为了在最终结果中获得相同数量的字段。