chan

朝生暮死不足笑 但悲百年不足道

【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_idstudent.sname 在逻辑上具有函数依赖关系。这意味着,对于每个唯一的 student_id,会有且仅有一个对应的 student.sname。MySQL 在开启 ONLY_FULL_GROUP_BY 模式时,允许这样的语句通过,只要未出现在 GROUP BY 中的列具有功能依赖性。
评论
还没有评论
    发表评论 说点什么