【问题标题】:How to SUM columns from three mysql tables?如何对三个 mysql 表中的列求和?
【发布时间】:2015-11-10 12:25:03
【问题描述】:

这是我的桌子:

表1

-----------------
  ID   | value  
-----------------
  1    |   0    
-----------------    
  2    |   3  
----------------- 
  3    |  10  
----------------- 

表2

-----------------
  ID   | value  
-----------------
  3    |   4    
----------------    
  5    |   6 
----------------- 
  6    |   8  
----------------- 

表3

-----------------
  ID   | value  
-----------------
  7    |   7    
----------------    
  8    |   8
----------------- 
  9    |   9  
-----------------

结果表

    -----------------
      ID   | value  
    -----------------
      1    |   0    
    ----------------    
      2    |   3 
    ----------------- 
      3    |   14  
   ----------------    
      5    |   6 
    ----------------- 
      6    |   8  
    -----------------
      7    |   7    
   ----------------    
      8    |   8
   ----------------- 
      9    |   9  
   -----------------

我想知道如何在 table1table2 和 ‍table3 上的 Value 列上求和以到达 Result 表?

我写的查询是这样的:

INSERT INTO result (ID, value)
SELECT ID, SUM(t1.value+ t2.value, t3.value)
FROM table1 t1, table2 t2, table3 t3
GROUP BY ID

但它只是挂起(实际表很大),我怀疑它是否正确,因为IDs 在 table1 和 table2 中不一样

【问题讨论】:

  • 这是一个交叉连接,也就是笛卡尔积,所有排列,在大表上。 1m x 1m =1 万亿
  • 其实这是一个模棱两可的错误 1052,但你明白了

标签: mysql sql sum


【解决方案1】:

这是一种使用 union all 获取每个 id 总和的方法

select id, sum(value) from (
    select id, value from table1
    union all select id, value from table2
    union all select id, value from table3
) t group by id

union all 将每个 select 语句的结果组合成一个大结果(all 部分确保不会自动删除重复的行),最后像往常一样对组合结果进行分组和求和。

【讨论】:

  • 不错。但是如果有 3 张桌子呢?
  • @Jand 你可以为其他表格添加额外的union all select ...
  • 对不起,我无法将它扩展到 3 个表,所以只是修改了我的问题。请您修改答案吗?
  • 工作起来就像一个魅力,而且非常快。谢谢!
猜你喜欢
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多