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

时间:2014-10-31 03:04:16

标签: mysql database union

我有以下查询:

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

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

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

1 个答案:

答案 0 :(得分:0)

根据建议,将您的查询更改为:

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

但正如评论中已经提出的那样:你应该认真考虑改变你的表结构,因为你有四个结构相同的表,它们可以合并到一个表中,另外一列设置为前四个表的名称表。