如何对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中多个表的字段求和?的主要内容,如果未能解决你的问题,请参考以下文章