如何将多条SELECT语句的结果整合到一张表中?附相关SQL示例
如何整合多条SELECT查询结果到一张表
好问题!要把你这几个不同层级女性冲锋队员的统计结果整合到同一张表里,有两种实用的方案,看你更需要哪种展示形式:
方案1:纵向合并(每个层级一行)
这种方式会把每个层级的统计结果作为单独的一行展示,同时新增一列标注层级名称,方便清晰区分:
SELECT 'Officer' AS 层级, count(Gender) AS 女性冲锋队员人数 FROM stormtroopers_officer JOIN st_officer_assign ON stormtroopers_officer.STID = st_officer_assign.STID WHERE Gender = 'Female' UNION ALL SELECT 'NCO' AS 层级, count(Gender) AS 女性冲锋队员人数 FROM stormtroopers_nco JOIN st_nco_assign ON stormtroopers_nco.STID = st_nco_assign.STID WHERE Gender = 'Female' UNION ALL SELECT 'Troop' AS 层级, count(Gender) AS 女性冲锋队员人数 FROM stormtroopers_troop JOIN st_troop_assign ON stormtroopers_troop.STID = st_troop_assign.STID WHERE Gender = 'Female' UNION ALL -- 补上你未完成的MOScout对应的查询,格式和上面一致即可 SELECT 'XXX' AS 层级, count(Gender) AS 女性冲锋队员人数 FROM stormtroopers_XXX JOIN st_XXX_assign ON stormtroopers_XXX.STID = st_XXX_assign.STID WHERE Gender = 'Female'
说明:
- 用
UNION ALL而非UNION是因为每个层级的结果都是唯一的,UNION ALL会直接合并结果,避免不必要的去重操作,性能更好。 - 确保每个
SELECT语句返回的列数和数据类型完全一致,否则会报错。
方案2:横向合并(所有层级在同一行)
如果你希望把所有统计结果放在同一行,每个层级作为单独的列,可以用子查询作为列的方式实现:
SELECT -- 统计Officer层级 (SELECT count(Gender) FROM stormtroopers_officer JOIN st_officer_assign ON stormtroopers_officer.STID = st_officer_assign.STID WHERE Gender = 'Female') AS FOScout, -- 统计NCO层级 (SELECT count(Gender) FROM stormtroopers_nco JOIN st_nco_assign ON stormtroopers_nco.STID = st_nco_assign.STID WHERE Gender = 'Female') AS FNScout, -- 统计Troop层级 (SELECT count(Gender) FROM stormtroopers_troop JOIN st_troop_assign ON stormtroopers_troop.STID = st_troop_assign.STID WHERE Gender = 'Female') AS FTScout, -- 补上你未完成的MOScout统计 (SELECT count(Gender) FROM stormtroopers_XXX JOIN st_XXX_assign ON stormtroopers_XXX.STID = st_XXX_assign.STID WHERE Gender = 'Female') AS MOScout
说明:
- 每个子查询单独统计一个层级的人数,最终结果会把这些统计值作为同一行的不同列展示,适合需要横向对比数据的场景。
- 如果某个层级没有符合条件的数据,对应的列会返回
NULL,你可以用COALESCE()函数把NULL替换成0,比如COALESCE(子查询, 0) AS 列名。
内容的提问来源于stack exchange,提问作者Mohammad Alamri
相关产品推荐
相关产品推荐

