【问题标题】:How to sum fields across multiple tables in mysql?如何对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 是高效的,但你的表结构不是。

标签: mysql database union


【解决方案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 中已经提出的那样:您应该认真考虑更改表结构,因为您有四个结构相同的表,可以将它们合并为一个表,并附加一列以设置为前四个的名称表格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2015-02-06
    相关资源
    最近更新 更多