在用mysql5.7.x版本时候,发现以前的group by语句都报错了。
this is incompatible with sql_mode=only_full_group_by
这是因为5.7版本默认是开启only_full_group_by的,也就是group_by的严格模式
一般来说:
select 选取分组中的列+聚合函数 from 表名称 group by 分组的列
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的。
举个例子:
id | a | b |
1 | av | bv |
2 | av | bvv |
3 | avv | bvvv |
这个表
对于:SELECT a,b FROM table GROUP BY a
这个sql语句来说,目的是合并a列相同的,以往是能够执行的,b的结果是bv。
但是现在严格模式下,是无法执行的,因为如果id=1和id=2两个行合并,那么b的值是什么?bv还是bvv?
这就有问题了,所以就会报错误了。
至于怎么样解决呢?可以去掉select中的b,或者在group by 中加上b。还是根据需求来,看看这个b执行sql的意义吧。
还有,可以关掉only_full_group_by这个。