当前位置: 代码迷 >> 综合 >> mysql only_full_group_by 记录
  详细解决方案

mysql only_full_group_by 记录

热度:35   发布时间:2023-12-05 19:22:47.0

例:

SELECT MIN(add_time) ,user_id ,device_sn FROM device

mysql 5.7 会报错:
 

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原因:

mysql 5.7 版本中默认是开启sql_mode = only_full_group_by。

在这个模式下分组查询时,出现在select字段后面的只能是group by后面的分组字段,或使用聚合函数包裹着的字段。

在上面的sql中,字段user_id 不在group by里面的分组字段,也没有被聚合函数包裹着。5.7以下的版本没有开启sql_mode=only_full_group_by,而5.7以上的版本开启例sql_mode=only_full_group_by,所以会出现以上的问题。

解决:

1.通过any_value()函数

SELECT MIN(add_time) ,any_value(user_id) ,device_sn FROM device

any_value函数介绍:

1.MySQL5.7之后,sql_mode中ONLY_FULL_GROUP_BY模式默认设置为打开状态。2.ONLY_FULL_GROUP_BY的语义就是确定select target list中的所有列的值都是明确语义,简单的说来,在此模式下,target list中的值要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于group by list中的表达式的值3.MySQL提供了any_value()函数来抑制ONLY_FULL_GROUP_BY值被拒绝4.any_value()会选择被分到同一组的数据里第一条数据的指定列值作为返回数据

2.修改配置文件(自行百度)


 

  相关解决方案