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

SQL错误1055求助:SELECT字段未在GROUP BY且不满足函数依赖

问题解决:MySQL 1055 错误

原SQL语句

select countrycode,name, max(population) 
from city 
group by CountryCode LIMIT 0, 1000  

错误信息

错误代码: 1055。SELECT列表中的表达式#2不在GROUP BY子句中,且包含非聚合列'world.city.Name',该列不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容 0.000秒

原因

MySQL开启only_full_group_by模式时,要求SELECT语句中的非聚合列必须出现在GROUP BY子句中,或者与GROUP BY的列存在函数依赖(比如主键列和其他列的关联)。原语句中name既不在GROUP BY里,且一个国家对应多个城市名,与countrycode无函数依赖,因此触发报错。

解决方案

方案1:获取每个国家人口最多的城市完整信息(推荐)

通过子查询先找出每个国家的最大人口,再关联原表匹配对应的城市:

SELECT c.countrycode, c.name, c.population
FROM city c
INNER JOIN (
    SELECT countrycode, MAX(population) AS max_pop
    FROM city
    GROUP BY countrycode
) t ON c.countrycode = t.countrycode AND c.population = t.max_pop
LIMIT 0, 1000;

方案2:保留原结构,使用聚合函数包裹非聚合列

如果不需要name对应最大人口的城市,只是想显示任意一个城市名,可以用ANY_VALUE()函数忽略函数依赖检查:

select countrycode, ANY_VALUE(name), max(population) 
from city 
group by CountryCode LIMIT 0, 1000;

方案3:临时关闭only_full_group_by模式(不推荐)

此方法会违反SQL标准,可能导致结果不可预期,仅临时测试时使用:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:07:13