问题:
给定城市和国家表,查询所有大陆(country.continent)的名称及其各自的平均城市人口(city.population),四舍五入到最接近的整数。
注意:city.countrycode和country.code是匹配的键列。不要把没有城市的大陆包括在你的产出中。
我的解决方案:
SELECT COUNTRY.CONTINENT, FLOOR(AVG(CITY.POPULATION)) FROM COUNTRY INNER JOIN CITY ON COUNTRY.CODE=CITY.COUNTRYCODE
但在我添加一个按语句分组的更新解决方案之前,这似乎不起作用:
SELECT COUNTRY.CONTINENT, FLOOR(AVG(CITY.POPULATION)) FROM COUNTRY INNER JOIN CITY ON COUNTRY.CODE=CITY.COUNTRYCODE GROUP BY COUNTRY.CONTINENT
为什么会这样?为什么不显示新的内部联接表的平均填充值?我知道这会给我一个错误的答案,也就是说,它将显示每个大陆相同的平均人口值。但我的疑问是,当我不添加groupby语句时,为什么它不起作用。
引发的错误:
第1行出现错误1140(42000):在不带group by的聚合查询中,select列表的表达式#1包含未聚合的列“run 5 y53padyvlle.country.continent”;这与sql\u mode=only\u full\u group by不兼容
1条答案
按热度按时间qkf9rpyu1#
问题不是关键
AVG()
. 你可以做:这将返回一行,即数据库中所有城市的总体平均人口。
问题是当你这样做的时候:
这个
CONTINENT
部分未汇总。sql引擎需要知道如何处理它。把钥匙放进GROUP BY
:表示要在结果集中为中的每个值指定一行
CONTINENT
.