我有以下查询:
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
我基本上想要对四个表中的字段进行求和。
这是一个很好的查询吗?
有没有更好的方法呢?
答案 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。
但正如评论中已经提出的那样:你应该认真考虑改变你的表结构,因为你有四个结构相同的表,它们可以合并到一个表中,另外一列设置为前四个表的名称表。