2014-11-07 83 views
0

我有3個SQL查詢我想將它們合併到一個表中使用聯盟我嘗試了不同的查詢,但他們都沒有工作,我錯過了什麼?SQL中的聯合和聚合

SELECT DISTINCT 
     place.type AS type, 
     COUNT(place.type)AS place, 
     0 AS msd, 
     0 AS county 
FROM place 
GROUP BY place.type; 

SELECT DISTINCT 
     mcd.type, 
     0 AS place, 
     COUNT(mcd.type) AS msd, 
     0 AS county 
FROM mcd 
GROUP BY mcd.type; 

SELECT DISTINCT 
     county.type, 
     0 AS place, 
     0 AS msd, 
     COUNT(county.type) AS county 
FROM county 
GROUP BY county.type; 

所以最終的輸出將是方案(類型,地點,MCD,縣),其中類型包含從3代表爲類型所有不同的值和地點包含的次數出現類型的值代替表和mcs和縣一樣。

+0

你會得到什麼錯誤信息? – Gabe 2014-11-07 03:00:44

+0

在查詢之間添加「UNION」會出現什麼問題?我認爲這應該工作。儘管如此,DISTINCT不是必需的。 – Andrew 2014-11-07 03:01:47

回答

0

您需要一個外部查詢才能從三個查詢合併得到type值。

下面是一個示例,使用UNION ALL集合運算符來組合三個查詢的結果。該查詢是內聯視圖,由外部查詢引用,該外部查詢在類型列上執行GROUP BY,在COUNT/0列上執行SUM聚合。

SELECT t.type 
     , SUM(t.place) 
     , SUM(t.msd) 
     , SUM(t.county) 
    FROM (SELECT place.type AS type 
       , COUNT(place.type) AS place 
       , 0 AS msd 
       , 0 AS county 
      FROM place 
      GROUP BY place.type 
      UNION ALL 
      SELECT mcd.type 
       , 0 AS place 
       , COUNT(mcd.type) AS msd 
       , 0 AS county 
      FROM mcd 
      GROUP BY mcd.type 
      UNION ALL 
      SELECT county.type 
       , 0 AS place 
       , 0 AS msd 
       , COUNT(county.type) AS county 
      FROM county 
      GROUP BY county.type 
     ) t 
    GROUP BY t.type 

對於每個查詢中的GROUP BY子句,不需要DISTINCT關鍵字。

+0

非常感謝! – Rayan 2014-11-11 03:18:00

0

看起來連接3表一起會更適合您的要求。

SELECT coalese(place.type,mcd.type,conty.type) AS type, 
     COUNT(place.type)AS place, 
     COUNT(mcd.type) AS msd, 
     COUNT(county.type) AS county 
FROM place 
FULL OUTER JOIN mcd ON place.type = mcd.type 
FULL OUTER JOIN county ON place.type = county.type 
GROUP BY coalese(place.type,mcd.type,conty.type)