一,问题现象
在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 问题的。即,将多出来的字段使用这个函数就好了。
具体用那种方法按实际情况选择。