如何合并多条查询不同国家疫苗接种数据的SELECT语句?
合并查询的两种实现方案
根据你需要的结果格式,可以选择以下两种写法:
方案1:长表结构输出(推荐)
如果可以接受每行存储「日期+国家+对应接种数」的结构化结果,直接用IN过滤即可,性能最优、代码最简洁:
SELECT date, location AS country, people_fully_vaccinated FROM vaccinations WHERE location IN ('Australia', 'United States', 'France', 'Israel');
方案2:宽表结构输出(按国家分列)
如果需要和你原来的多查询结果一致,同一个日期下不同国家的接种数单独成列,用条件聚合实现:
SELECT date, MAX(CASE WHEN location = 'Australia' THEN people_fully_vaccinated END) AS Australia, MAX(CASE WHEN location = 'United States' THEN people_fully_vaccinated END) AS `United States`, MAX(CASE WHEN location = 'France' THEN people_fully_vaccinated END) AS France, MAX(CASE WHEN location = 'Israel' THEN people_fully_vaccinated END) AS Israel FROM vaccinations WHERE location IN ('Australia', 'United States', 'France', 'Israel') GROUP BY date ORDER BY date ASC;
补充说明
- 条件聚合写法中如果某个日期对应国家没有上报数据,对应列会返回NULL,符合实际业务逻辑
- 不推荐用多表JOIN拼接的方式实现,若存在国家缺日期的情况会导致结果漏行,条件聚合的兼容性和稳定性更高
- 如果你使用的数据库支持
PIVOT语法(如SQL Server、Oracle、PostgreSQL 15+),也可以用PIVOT语法实现,底层逻辑和上述条件聚合一致
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

