SQL查询仅返回一行且GROUP BY附近报错的问题求助
SQL语句错误原因说明
错误原因
- 语法顺序错误:SQL标准语法要求
GROUP BY子句必须在ORDER BY子句之前执行,你当前的语句将ORDER BY写在GROUP BY前面,直接触发语法错误。 - 分组规则不兼容:SELECT列表中包含非聚合字段
country_name,但GROUP BY仅指定了country_code,如果数据库开启了ONLY_FULL_GROUP_BY默认模式,这种写法也会报错。由于country_code是Country表主键,一个country_code对应唯一的country_name,建议将country_name也加入GROUP BY保证多数据库兼容。 - 无分组时聚合逻辑错误:当你仅保留SELECT和FROM子句时,语句中包含聚合函数
COUNT(),没有分组的情况下数据库会把所有匹配行聚合为单条结果,非聚合字段country_code和country_name的取值为数据库随机返回(多数实现取结果集最后一行的值),所以会出现仅返回加拿大一条数据的情况,COUNT返回的是所有城市的总条数,不是单国家的城市数,和预期不符。
修正后的SQL语句
SELECT c.country_code, co.country_name, COUNT(c.city_name) AS city_count FROM Country co JOIN City c USING (country_code) GROUP BY c.country_code, co.country_name ORDER BY city_count;
执行结果说明
修正后的语句会返回所有有城市数据的国家对应的城市数量,和测试数据匹配的结果为:
| country_code | country_name | city_count |
|---|---|---|
| CAN | Canada | 7 |
| MEX | Mexico | 8 |
| US | United States | 9 |
| CHN | China | 9 |
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

