如何编写SQL查询实现分国家列展示的完全接种疫苗人数统计报表
疫苗完全接种人数统计报表实现方案
需求确认
- 报表按观测日期维度展示,每个日期对应4个指定国家的完全接种疫苗总人数
- 数据关联规则:
people_fully_vaccinated表与location表执行INNER JOIN关联 - 最终输出为每行对应一个日期、每列对应一个国家接种数据的宽表格式
实现代码
假设两张表通过location_id字段关联,people_fully_vaccinated表存储日期、地点id、完全接种人数数据,location表存储地点id、国家名称等基础信息,参考SQL如下:
SELECT pv.observation_date 观测日期, SUM(IF(l.country = '国家A', pv.people_fully_vaccinated, 0)) 国家A完全接种人数, SUM(IF(l.country = '国家B', pv.people_fully_vaccinated, 0)) 国家B完全接种人数, SUM(IF(l.country = '国家C', pv.people_fully_vaccinated, 0)) 国家C完全接种人数, SUM(IF(l.country = '国家D', pv.people_fully_vaccinated, 0)) 国家D完全接种人数 FROM people_fully_vaccinated pv INNER JOIN location l ON pv.location_id = l.location_id WHERE l.country IN ('国家A', '国家B', '国家C', '国家D') GROUP BY pv.observation_date ORDER BY pv.observation_date;
如果你的数据库不支持IF函数,可以替换为CASE WHEN写法,逻辑完全一致。你只需要把语句中的字段名、国家名称替换为你实际业务中的对应值,即可直接运行得到符合要求的报表数据。
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

