Hackerrank基础JOIN测试报错:求大洲平均城市人口SQL问题
问题分析与修正方案
你的SQL语句存在两个关键问题:
1. 取整函数不符合要求
题目明确要求对城市人口平均值向下取整,但你使用的ROUND(AVG(city.population), 0)是四舍五入取整,会把小数部分≥0.5的值进一位,这和“向下取整”的要求不符。正确的做法是使用FLOOR()函数,它会直接舍去所有小数部分,返回不大于平均值的最大整数。
2. 连接类型遗漏了无城市的大洲
你使用的JOIN是内连接,只会保留同时在CITY和COUNTRY表中有匹配记录的大洲。但题目要求查询所有大洲,哪怕某个大洲没有对应的城市记录,也需要被包含在结果中。因此应该改用LEFT JOIN,以COUNTRY表作为左表,确保所有大洲都能被查询到。
修正后的SQL语句
SELECT country.continent, FLOOR(AVG(city.population)) AS avg_population FROM country LEFT JOIN city ON city.countrycode = country.code GROUP BY country.continent;
如果需要将无城市大洲的平均值显示为0而非NULL,可以用COALESCE()函数处理:
SELECT country.continent, COALESCE(FLOOR(AVG(city.population)), 0) AS avg_population FROM country LEFT JOIN city ON city.countrycode = country.code GROUP BY country.continent;
内容的提问来源于stack exchange,提问作者Riinu Anslan
相关产品推荐
相关产品推荐

