一. (推荐)any_value
mysql用来应对 ONLY_FULL_GROUP_BY 所出现的 any_value()
1. mysql 5.7 以后 基本都会自带 ONLY_FULL_GROUP_BY ,很可能在部署以后,会出现 1055的错误
2. ONLY_FULL_GROUP_BY 意思就是 select target list 中有明确的语义,在5.7之前不存在是允许模糊语义查询的。但是5.7以后,需要明确你所查询的所有数据,允许有聚合函数,不允许存在group by 后所不带字段
3. 故而Mysql提供了 any_value() 来拒绝 ONLY_FULL_GROUP_BY
4. 需注意一点 any_value() 所取得是group by同一组数据中的第一条数据信息
① 规范形式, 简单到不能再简单,没有任何问题
② group by 之外的字段加入 select 之后, 发现报错,1055 不兼容
③ 加入 any_value 来拒绝 ONLU_FULL_GROUP_BY的规范
④ 变换成聚合函数也是不存在问题的
注意:
只要不是group by之后的字段,那么不管是放select之后还是 order by 之后 都会产生问题, 但是注意 where 就不会产生问题
二. (半推荐) 套sql
既然 ONLY_FULL_GROUP_BY 不允许存在group by 后面以外的字段显示, 那么就将 group by 按照需要字段套进去然后进行where,获取到需要的数据
一般来说,不符合部分场景
三. (极度不推荐)更改mysql中的 sql_mode
这种方法纯属扯淡,但是作为了解还是比较可以的。 毕竟作为公司开发,去更改数据库的sql_mode 然后重启,简直是吃饱了撑的。当天就下岗,
数据库命令行输入 select @@sql_mode 就能看到所有的规则,找mysql的配置文件打开就能看到。