2014-10-31 53 views
0

我有以下查询:如何在mysql中的多个表中总结字段?

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

为什么你有四张结构相同的表? – siride 2014-10-31 03:36:55

+0

四个表统计 – KMJ 2014-10-31 03:43:42

+0

将所有四个表放入一个表中,因为它表示相同类型的信息,并向该表添加另一列以引用'('one','two','three','4') '。这样你的数据库结构很好,检索数据很容易。 – wolfgangwalther 2014-10-31 03:47:33

回答

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以了解类似的问题和解决方案。

但正如已经在评论中提出的那样:您应该认真考虑更改您的表结构,因为您有四个具有相同结构的表,可以将其合并到一个表中,并使用附加列来设置以前的名称四张桌子。

相关问题