group by this is incompatible with sql_mode=only_full_group_by

MySQL、MariaDB、TiDB 等都是关系型数据库,并且都可以很好的平滑过渡。
我们使使用的是 TiDB,但是在 DBA 通知升级 TiDB 之后,上线时项目报错了,this is incompatible with sql_mode=only_full_group_by

后来排查发现 MySQL 5.7 以及TiDB 最新版本均不支持 group by 查询时的字段不在 group by 的条件之中。

查找资料,原由是应为:
MySQL 5.7,实现检测功能的依赖。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认),MySQL拒绝选择列表查询,条件,或命令列表是指非聚合列既不是GROUP by子句中指定功能也不依赖他们。(5.7之前,MySQL不检测功能的依赖和ONLY_FULL_GROUP_BY在默认情况下不启用。 ONLY_FULL_GROUP_BY,对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,也就是说查出来的列必须在GROUP BY后面出现否则就会报错,或者这个字段出现在聚合函数里面。(Mysql5.7 GROUP BY文档说明)
解决办法:
https://blog.csdn.net/qq_21441663/article/details/83552316

因为不想更改数据库服务的配置,所以选择了在 group by 后面添加了要查训的字段,解决问题。
例如:

select count(distinct id_card) , phone from user_info group by id_card
更改后
select count(distinct id_card) , phone from user_info group by id_card,phone
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值