[英]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.