欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql only_full_group_by 记录

程序员文章站 2022-03-09 10:41:00
...

例:

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.修改配置文件(自行百度)


 

相关标签: mysql