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