group by 引发的错误

事情起因#

今天在做一个汽车百公里加速排行榜的时候,遇到了一个错误,因为用到了 group by 并且 mysql 版本为 5.7.26, 所以出现了这个错误。

错误码#

MySQL: 1055 Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column

这个错误意思是,查询的字段没有被包含进 GROUP BY 语句中。

错误原因#

MySQL5.7 以前 only_full_group_by 这个 sql_mode,没有强制默认。
MySQL 5.7 之后,only_full_group_by 成为 sql_mode 的默认选项之一
only_full_group_by 这个 sql_mode 的唯一要求,就是
所有的 select 字段必须在 group by 字段中,否则必须出现在 SQL Aggregate 函数中,反过来却是非必须的

解决方案#

  1. 剔除 select 语句中的多余字段,不触发 only_full_group_by

  2. 使用 any_value() 函数来包装值

  3. 关闭 sql_mode=ONLY_FULL_GROUP_BY。在配置文件 my.cnf 中关闭 sql_mode=ONLY_FULL_GROUP_BY

本作品采用《CC 协议》,转载必须注明作者和本文链接
人生的意义在于承担人生无意义的勇气