mysql Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggre

一,问题现象

        在mysql中,用group by 分组时 报错 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggre,运行的sql 

select a.id, a.name, a.age
from a
group by id, name

        这个主要是违背了mysql开启的校验 only_full_group_by 检测

二,问题的本质

        这个问题主要是mysql 开启了only_full_group_by ,同时,select 语句不够标准。only_full_group_by 说白了就是要求,select 的列要全部来自于group by 中的列,不能select 之外的列。 这个主要是mysql版本,5.7之前是默认关闭的,5.7之后的高版本都是自动打开only_full_group_by 校验检测的。 

三,解决问题

      1. 关闭only_full_group_by 检测(这个最粗暴,最简单,但是要重启mysql服务)

      2. 修改sql语句,比如

select a1.*, a.age
from a left join 
(select a.id, a.name
from a
group by a.id, a.name) a1 on a1.id = a.id

      即,将分组后的结果和主表再次拼接一下就好了。

      3.  any_value() 函数,这个就是用来解决only_full_group_by 问题的。即,将多出来的字段使用这个函数就好了。

     具体用那种方法按实际情况选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值