2014-10-31 54 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以瞭解類似的問題和解決方案。

但正如已經在評論中提出的那樣:您應該認真考慮更改您的表結構,因爲您有四個具有相同結構的表,可以將其合併到一個表中,並使用附加列來設置以前的名稱四張桌子。

相關問題