MySQL单查询统计多值:如何一次性统计指定国家代码的城市数
解决方案:一次性统计多个国家的城市数量
嗨,这个需求其实用SQL的GROUP BY子句就能完美解决!我们可以通过分组统计来一次性得到指定国家的城市数量,不用多次单独查询。
核心SQL语句
SELECT CountryCode, COUNT(Name) AS city_count FROM city WHERE CountryCode IN ('AFG', 'NLD', 'IND') GROUP BY CountryCode;
语句解释
WHERE CountryCode IN ('AFG', 'NLD', 'IND'):先过滤出我们需要统计的三个国家的城市数据,避免处理无关行,提升查询效率。GROUP BY CountryCode:将过滤后的数据按照国家码分组,把同一个国家的所有城市归为一组。COUNT(Name) AS city_count:统计每组内的城市数量,并用city_count给结果列起一个更直观的别名。
预期结果
执行这条SQL后,你会得到清晰的分组统计结果:
| CountryCode | city_count |
|---|---|
| AFG | 2 |
| NLD | 3 |
| IND | 3 |
扩展:处理无数据的国家(可选)
如果需要确保即使某个指定国家没有城市数据,也能在结果中显示该国家码和0,可以用子查询生成目标国家列表,再通过LEFT JOIN实现:
SELECT c.country_code, COUNT(ct.Name) AS city_count FROM ( SELECT 'AFG' AS country_code UNION ALL SELECT 'NLD' UNION ALL SELECT 'IND' ) c LEFT JOIN city ct ON c.country_code = ct.CountryCode GROUP BY c.country_code;
这样即使某个国家在city表中没有记录,结果里也会显示该国家码和0,不会被过滤掉。
内容的提问来源于stack exchange,提问作者Saurabh Shukla
相关产品推荐
相关产品推荐

