MySQL使用count()函数统计国家数量及对应城市数问题
MySQL统计不同国家总数的实现方案
核心实现(直接获取结果)
直接使用COUNT()搭配DISTINCT关键字即可完成去重计数,无需分组操作,SQL语句如下:
SELECT COUNT(DISTINCT CountryCode) AS distinct_country_total FROM world.city;
- 逻辑说明:
COUNT(DISTINCT 字段名)会先对该字段的所有非空值去重,再统计去重后的总条数,刚好匹配你统计唯一国家数量的需求,查询结果直接返回唯一国家的总个数。
补充:在原有分组查询中同步显示总国家数
如果你需要在之前「按国家统计城市数量」的查询结果里,同时带上全局唯一国家总数,可以使用窗口函数实现:
SELECT *, COUNT(name) AS city_total, COUNT(DISTINCT CountryCode) OVER() AS distinct_country_total FROM world.city GROUP BY CountryCode;
- 逻辑说明:
OVER()声明全局窗口范围,聚合函数会作用于所有分组后的结果,计算全局唯一的国家编码总数,每行结果都会携带这个总数值,取任意行的distinct_country_total字段值即可得到你需要的结果。
之前统计结果不符合预期的原因
你在原有GROUP BY分组语句中直接添加COUNT(CountryCode)时,聚合函数默认作用于每个分组内部,统计的是每个国家分组下的城市行数,最终所有分组的该字段求和才是全表城市总数,因此无法直接得到去重后的国家总数。
内容的提问来源于stack exchange,提问作者Alexandre Ramos
相关产品推荐
相关产品推荐

