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.修改配置文件(自行百度)
推荐阅读
-
淘宝购物出现异地登陆怎么办?阿里旺旺查询登陆记录的方法
-
淘宝怎么查看退款?阿里旺旺查询退款记录的教程
-
Win7怎么隐藏使用记录?Win7隐藏最近使用记录的方法
-
MySQL 双向备份的实现方法
-
MYSQL使用.frm恢复数据表结构的实现方法
-
MySQL修改innodb_data_file_path参数的一些注意事项
-
MySQL中的LOCATE和POSITION函数使用方法
-
python安装mysql-python简明笔记(ubuntu环境)
-
Starting MySQL.Manager of pid-file quit without updating file.[FAILED]的解决方法
-
Mysql 本地计算机无法启动 mysql 服务 错误 1067:进程意外终止。