SQL技术问询:如何筛选1900-2021年每年都存在的国家?
筛选1900-2021年每年都有记录的国家的SQL方案
核心思路
统计每个国家在目标年份范围内的唯一年份记录数,若等于总年份数(2021-1900+1=122),则该国家每年都有记录。
具体实现
方案一:固定年份范围
适合已知年份范围固定的场景,直接硬编码总年数:
SELECT country FROM owid_energy_data WHERE year BETWEEN 1900 AND 2021 GROUP BY country HAVING COUNT(DISTINCT year) = 122;
方案二:动态匹配数据时间范围
结合你已有的最早/最晚年份查询,适配数据范围变动的情况,无需手动修改年份数值:
SELECT country FROM owid_energy_data WHERE year BETWEEN (SELECT MIN(year) FROM owid_energy_data) AND (SELECT MAX(year) FROM owid_energy_data) GROUP BY country HAVING COUNT(DISTINCT year) = (SELECT MAX(year) - MIN(year) + 1 FROM owid_energy_data);
注意事项
- 使用
COUNT(DISTINCT year)而非COUNT(year),是为了排除同一国家同一年存在多条重复记录的干扰,确保统计的是唯一有效年份数。
内容的提问来源于stack exchange,提问作者Samantha
相关产品推荐
相关产品推荐

