【MySQL】group by
GROUP BY 决定分组的逻辑:
GROUP BY指定了分组的依据,也就是说它控制哪些行被归为一组。- 只有在
GROUP BY中指定的列,以及通过聚合函数计算得出的列,才是合法的输出。 - 如果
SELECT中的列既不在GROUP BY中,也不通过聚合函数处理,就会触发 MySQL 的ONLY_FULL_GROUP_BY模式限制。
问:
select student_id,student.sname,count(1),sum(num) from score left join student on score.student_id=student.sid group by student_id; 可是这个里面的student.sname不是不在group by中么
ChatGPT 说
你的 SQL 查询语句确实在 GROUP BY 子句中没有包含 student.sname,但在某些情况下可以运行,这是由于以下原因:
为什么能运行?
- 你查询中的
GROUP BY是基于student_id的,而student_id和student.sname在逻辑上具有函数依赖关系。这意味着,对于每个唯一的student_id,会有且仅有一个对应的student.sname。MySQL 在开启ONLY_FULL_GROUP_BY模式时,允许这样的语句通过,只要未出现在GROUP BY中的列具有功能依赖性。