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

MySQL查询为何SELECT子句的列需要再次包含在GROUP BY子句中

MySQL GROUP BY 报错原因说明

1. 要求id放入GROUP BY的核心规则

MySQL 5.7及以上版本默认开启ONLY_FULL_GROUP_BY SQL模式,符合标准SQL的分组约束:

  • 当使用GROUP BY执行分组查询时,SELECT子句中仅允许出现两类内容:GROUP BY子句中指定的分组列、使用聚合函数(如COUNT()、SUM()、MAX()、GROUP_CONCAT()等)计算的结果列。
  • 你的查询中SELECT里的id、player_name属于非分组列、也没有被聚合函数包裹,按身高范围分组后每个分组对应多条球员记录,数据库无法确定要返回该分组下的哪一条记录的id和姓名,因此触发报错。
  • 该报错和你使用派生列height_range分组没有关联,是SELECT子句的内容不符合分组规则导致的。

2. MySQL支持按派生列/SELECT别名分组

你无需怀疑height_range作为分组条件的合法性:MySQL对SQL标准做了扩展,允许GROUP BY子句直接引用SELECT阶段定义的别名,不需要重复写整个CASE表达式。

正确写法参考

如果你的需求是统计每个身高区间的相关指标,可将SELECT中的单列替换为聚合函数:

SELECT
  CASE 
    WHEN height <= 50 THEN '0-50'
    WHEN height BETWEEN 50 AND 70 THEN '51-70'
    WHEN height BETWEEN 71 AND 80 THEN '71-80'
    ELSE '80+'
  END AS height_range,
  COUNT(*) AS total_players, -- 统计区间内总人数
  GROUP_CONCAT(player_name) AS player_list -- 可选:拼接区间内所有球员姓名
FROM
  benn.college_football_players
GROUP BY 
  height_range 
ORDER BY
  height_range DESC

如果你的需求只是将所有球员按身高区间排序展示,不需要做聚合统计,去掉GROUP BY子句,直接按height_range排序即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:24:02