合并两个表并添加结果

时间:2014-02-18 15:15:48

标签: mysql union

我有2个表,部分相同列,我想在一个查询中合并:

table 1
|id    |user  |amount |date
|1     |4     |1000   |2014-01-01 01:00:00
|2     |1     |2000   |2014-01-01 01:00:00
|3     |2     |1500   |2014-01-01 01:00:00

table 2
|id    |user  |amount |date                |flag
|1     |4     |1000   |2014-01-01 01:00:00 |0
|2     |3     |2000   |2014-01-01 01:00:00 |1
|3     |5     |1500   |2014-01-01 01:00:00 |2

我想列出两个表共有的内容,但我想添加amount列。因此,如果用户在表1和表2中,即使两次都是多次,它应该只在结果中列出他一次,但金额应该加起来。

结果应如下:

result
|user  |amount |date                
|4     |2000   |2014-01-01 01:00:00  <- note the 2000 here (1000+1000)
|1     |2000   |2014-01-01 01:00:00 
|2     |1500   |2014-01-01 01:00:00 
|3     |2000   |2014-01-01 01:00:00 
|5     |1500   |2014-01-01 01:00:00 

我想到了像

这样的查询
SELECT user, amount, date FROM (
    (SELECT user, amount, date FROM table1)
UNION
    (SELECT user, amount, date FROM table2)
) t1

但这不会累计金额值,条目会多次列出。 如果我使用GROUP BY,它只列出条目1次但条目被删除意味着金额也不总结。使用SUM,它只添加所有条目并显示1个条目,但我需要将所有条目一次性与金额列相加。

1 个答案:

答案 0 :(得分:2)

使用聚合函数尝试此操作,您应该使用group by by group by by by you only

SELECT t1.user, SUM(t1.amount), t1.date FROM (
    (SELECT user, amount, date FROM table1)
UNION ALL
    (SELECT user, amount, date FROM table2)
) t1

GROUP BY t1.user

GROUP BY (Aggregate) Functions