【问题标题】:combine two tables and add up results合并两个表并将结果相加
【发布时间】:2014-02-18 15:15:47
【问题描述】:

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

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

所以结果应该如下:

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 次。

【问题讨论】:

    标签: mysql union


    【解决方案1】:

    使用聚合函数试试这个,你应该使用 group by 而不使用 group by 你只会得到一行

    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

    【讨论】:

      猜你喜欢
      • 2011-07-05
      • 1970-01-01
      • 2014-01-19
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多