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

MySQL查询Top5热销产品报错1055,求解决方法

问题分析与解决

错误信息翻译

错误代码:1055。SELECT列表中的第2个表达式不在GROUP BY子句中,并且包含非聚合列'ims.producttb.ProductID',该列在功能上不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容

报错原因

MySQL默认开启的only_full_group_by严格模式要求:SELECT语句中的非聚合列(未被SUM、COUNT等聚合函数包裹的字段)必须要么出现在GROUP BY子句中,要么与GROUP BY子句中的列存在函数依赖关系(比如主键与所属表其他字段的一一对应关系)。

你的查询仅按ProductName分组,但ProductID既不在GROUP BY里,MySQL无法确认它和ProductName是一一对应的(比如可能存在不同ID但名称相同的产品),因此触发错误。

解决方案

提供两种可行的修改方式:

方式一:将ProductID加入GROUP BY子句

直接把需要SELECT的非聚合列都加到GROUP BY里,符合严格模式要求:

SELECT producttb.ProductName, producttb.ProductID, SUM(ordertb.Qty) AS Q 
FROM ordertb 
INNER JOIN producttb ON ordertb.ProductID = producttb.ProductID 
WHERE ordertb.OrderDate BETWEEN '2022-11-30' AND '2023-01-18' 
GROUP BY producttb.ProductName, producttb.ProductID 
ORDER BY Q DESC 
LIMIT 5;

方式二:按ProductID分组(更高效)

因为ProductID是产品表的主键,ProductName必然与它一一对应,按主键分组既符合严格模式要求,性能也更优:

SELECT producttb.ProductName, producttb.ProductID, SUM(ordertb.Qty) AS Q 
FROM ordertb 
INNER JOIN producttb ON ordertb.ProductID = producttb.ProductID 
WHERE ordertb.OrderDate BETWEEN '2022-11-30' AND '2023-01-18' 
GROUP BY producttb.ProductID 
ORDER BY Q DESC 
LIMIT 5;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:17:20