SQL 错误 [1055] [42000]: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggreg

在使用group by时,报错信息如下:
在这里插入图片描述
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mome.a.type' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

mysql5.6中默认的sql_mode是宽松模式,即`NO_ENGINE_SUBSTITUTION`,
mysql5.7中默认的sql_mode是严格模式,即`STRICT_TRANS_TABLES`。

这个问题我出现的原因是mysql版本是5.7.x,5.7版本以上是默认开启了 only_full_group_by 严格模式,此模式下group by 只能获取受到其影响的字段信息,无法和其他未受其影响的字段共存。

首先通过SQL查询全局sql_mode模式:

 select @@global.sql_mode;

在这里插入图片描述
发现已开启开启only_full_group_by 模式,我们可以通过如下方式修改:
方式一:

set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

在这里插入图片描述
查询显示修改成功,重新连接,再次使用group by,成功查询。
在这里插入图片描述

方式二:
修改mysql配置文件:
sudo vim /etc/my.cnf
mysqld下添加一列:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

重启mysql服务,再次使用,查询成功。
在这里插入图片描述

方式三:
通过ANY_VALUE()函数,非分组字段的出现(和关闭 only_full_group_by 模式有相同效果)

select ANY_VALUE(XXX1),XXX2,COUNT(XXX3) from TABLE  GROUP BY XXX2;

在这里插入图片描述

但是个人认为only_full_group_by 模式开启比较好,因为不开启的话,当不加函数时,group bydistanct一样,是去重查询,不够严谨。

所以个人建议使用方式三去避免这个错误,而不是修改sql_mode模式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值