簡體   English   中英

SQL中的聯合與聚合

[英]Union and Aggregation in SQL

我有3個SQL查詢,我想使用Union將它們合並到一個表中,但嘗試了不同的查詢,但沒有一個起作用,我缺少什么?

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和county相同。

您需要一個外部查詢才能從三個查詢的組合中獲取type值。

這是一個示例,使用UNION ALL集合運算符組合三個查詢的結果。 該查詢是一個內聯視圖,由外部查詢引用,該外部查詢在type列上執行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關鍵字。

看來將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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM