我有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个条目,但我需要将所有条目一次性与金额列相加。
答案 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