You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL技术问询:统计含城市国家的城市数量与平均人口

问题解决与说明

正确查询语句

要实现需求,需要用INNER JOIN关联两个表,同时按国家分组做聚合统计,正确语句如下:

SELECT 
    country.code AS CountryCode,
    country.name AS CountryName,
    COUNT(city.id) AS NumberOfCities,
    AVG(city.population) AS AverageCityPopulation
FROM world.country
INNER JOIN world.city ON country.code = city.CountryCode
GROUP BY country.code, country.name;

你的查询错误分析

  1. 错误选择字段:你选了city.name和city.countrycode,但统计是按国家分组,这类非分组键、非聚合函数的字段会导致结果异常(MySQL非严格模式下返回随机值,严格模式直接报错)。
  2. 错误的过滤条件:WHERE city.CountryCode > 1完全无效,CountryCode是字符串类型的国家代码,不是数字,这个条件误过滤了绝大多数数据,只留下了刚好符合错误逻辑的阿鲁巴数据。
  3. 缺少分组语句:使用AVG这类聚合函数时,必须用GROUP BY指定分组维度,否则只会返回全局单一结果。

JOIN记忆技巧

把两个表看成左右两个集合,用简单逻辑记:

  • INNER JOIN:取交集,只保留两边能匹配上的数据(刚好符合你“至少有一个城市的国家”的需求)。
  • LEFT JOIN:左表全留,右表只留匹配的,没匹配的补NULL(比如要查所有国家,包括没有城市的,就用country LEFT JOIN city)。
  • RIGHT JOIN:右表全留,左表只留匹配的,没匹配的补NULL,实际用得少,它等价于把左右表调换后的LEFT JOIN,比如A RIGHT JOIN B = B LEFT JOIN A,记牢LEFT JOIN就够。

学习资源推荐

  • 入门教程:MySQL官方文档入门板块,菜鸟教程MySQL专区,W3Schools MySQL教程
  • YouTube频道:MySQL Tutorial(基础讲解细致),Programming with Mosh(MySQL快速入门系列),TechWorld with Nana(数据库系统讲解)
  • 论坛社区:Stack Overflow(搜MySQL问题基本都有解答),MySQL官方论坛,国内的CSDN、掘金MySQL板块

内容的提问来源于stack exchange,提问作者benny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:51:01