MySQL中only_full_group_by报错解决方案

1. 问题来源

以deptno分组查询,显示每组sal的最大值以及对应ename

SELECT ename, MAX(sal), deptno FROM emp GROUP BY deptno;

error:1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db01.emp.ename' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

2.错误分析

从error中可以看出,问题在于ename以及sql_mode=only_full_group_by

经查询,only_full_group_by要求SELECT target list中的所有列的值都具有明确意义,即ename需要同sal一样被MAX、MIN、AVG等聚合函数所包含,或同deptno一样位于GROUP BY表达式中。

3.解决方案

(1) MySQL提供了any_value()函数,但要注意,该函数会选择被分到同一组的数据里第一条数据的指定列值作为返回数据,也就是说结果中MAX(sal)对应的ename值可能并不是该sal实际对应的ename,因此该方式需要根据实际情况使用。

(2) 更改MySQL的配置,找到配置文件my.cnf,删除sql_mode中的only_full_group_by

(3) 降低MySQL版本至5.7以下(有风险)

(4) 老老实实修改SQL语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值