如何对mysql中多个表的字段求和?

Posted

技术标签:

【中文标题】如何对mysql中多个表的字段求和?【英文标题】:How to sum fields across multiple tables in mysql? 【发布时间】:2014-10-31 03:04:16 【问题描述】:

我有以下疑问:

SELECT adate, sum(b), sum(c), sum(d)
FROM
(
  (
    SELECT a.adate, sum(b), sum(c), sum(d)
    FROM one
    WHERE a='aa'
    GROUP BY a.adate
  )
  UNION ALL 
  (
    SELECT a.adate, sum(b), sum(c), sum(d)
    FROM two
    WHERE a='aa'
    GROUP BY a.adate
  )
  UNION ALL
  (
    SELECT a.adate, sum(b), sum(c), sum(d)
    FROM three
    WHERE a='aa'
    GROUP BY a.adate
  ) 
  UNION ALL 
  (
    SELECT a.adate, sum(b), sum(c), sum(d)
    FROM four
    WHERE a='aa'
    GROUP BY a.adate
  )
) a
GROUP BY a.adate

我基本上想对四个表中的字段求和。

这是一个很好的查询吗? 有更好的方法吗?

【问题讨论】:

为什么会有四个结构相同的表? 四表统计 将所有四个表放在一个表中,因为它代表相同类型的信息,并在该表中添加另一列以引用('one','two','three','four')。这样,您的数据库结构良好,检索数据也很容易。 支付统计有四个不同统计的表。告诉我们比 union all 更有效的查询 UNION ALL 是高效的,但你的表结构不是。 【参考方案1】:

按照建议,将您的查询更改为:

SELECT adate, sum(b), sum(c), sum(d)
FROM
(
  (
    SELECT *
    FROM one
    WHERE a='aa'
  )
  UNION ALL 
  (
    SELECT *
    FROM two
    WHERE a='aa'
  )
  UNION ALL
  (
    SELECT *
    FROM three
    WHERE a='aa'
  ) 
  UNION ALL 
  (
    SELECT *
    FROM four
    WHERE a='aa'
  )
) a
GROUP BY adate

这组和求和一次。有关类似问题和解决方案,请参阅Getting the sum of several columns from two tables。

但是正如 cmets 中已经提出的那样:您应该认真考虑更改表结构,因为您有四个结构相同的表,可以将它们合并为一个表,并附加一列以设置为前四个的名称表格。

【讨论】:

以上是关于如何对mysql中多个表的字段求和?的主要内容,如果未能解决你的问题,请参考以下文章

mysql一个表中多个字段对应另一个表的id如何查询?

如何根据多个条件对行求和 - R? [复制]

对多个计数字段求和

mysql如何更新一个表中的某个字段值等于另一个表的某个字段值

如何在 MySQL 中对两个结果集中的列求和

mysql如何把一个表的字段赋值到另一张表?