mysql报错:

[Err] 1055 - Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘库名.表名.字段’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

分析

发生这个错误,一般是sql不规范,出现类似下列写法导致的:
select a字段,b字段 from 表 group by b字段

可以看到,明明按照b字段分组的,却想查出a字段,当然,mysql5.7.5版本之前,由于没有对这种做严格校验,所以如果刚好每组b字段都有相同的a字段,也是能查出来的,所以给了很多人一个错觉,就是觉得这样写也是没问题的,包括我之前也是这样认为的,汗颜。

但今天发现这个问题,却发现网友给出的解决方案,更是粗糙的不行。
一般网上搜到的解决方案是:

不启用ONLY_FULL_GROUP_BY,也就是不检测这种功能依赖关系,然后让你执行这个语句:
select @@global.sql_mode;
查出有ONLY_FULL_GROUP_BY,然后让你把ONLY_FULL_GROUP_BY删掉,再把剩下的值set进去,比如:
set @@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
更有甚者,直接让你set一个空,合着把所有的检测这种都给关了:
set @@global.sql_mode='';
比如这个文章就是这么给的解决方案(这个还稍微好点,不是直接set空的):
https://blog.csdn.net/qq_34707744/article/details/78031413(并不是针对这个,相同解决方案的文章很多,也不知道谁抄的谁)

这样搞问题确实也解决了,但治标不治本。

正确的解决方案,应该是优化你的sql,因为sql规范中确实明确指出,用了group by后,select后的字段,只能是group by的字段,或者一些聚集函数,比如sum(a字段)这种。
查看sql92规范中,人家确实也明确指出针对group by的规范,如下:
sql相关group by规范的链接:http://dev.cs.ovgu.de/db/sybase9/help/dbugen9/00000284.htm
截图如下:

大概意思是:

用于GROUP BY的SQL / 92标准要求满足以下条件:SELECT子句的表达式中使用的列必须在GROUP BY子句中。否则,使用该列的表达式是一个聚合函数。GROUP BY表达式只能包含选择列表中的列名,而不能仅用作向量聚合的参数。

解决

所以,针对上面这个不规范sql,应该改成:
select a字段,b字段 from 表 group by a字段,b字段;
而且最好ab字段是索引,当然这是group by的优化部分了,不多说了。

反思

这个问题,说实话我以前也没太注意,确实也是之前用的都是mysql5.7.5版本之前的低版本,也一直不报错,所以慢慢的惯出坏习惯了,不认为这是个问题。其实这个问题,也是我的一个很有资历的同事给我指出的,在此感谢他。
最近由于刚刚换了mysql8高版本版本,也是各种被教育,但我觉得是好事,版本在升级,人也要跟着进步。
绝对不能学习很多网友的那个解决方案,人家高版本专门把这个检测功能依赖关系加上了,你再手动关掉,那还不如直接用低版本算了。

不过网友的这种想法,有时候想想也能理解一点。因为在软件行业,干久了就会有一个思维,就是如果一个问题没办法正面解决,那就想办法绕过他,只要最终目的达到就行了。
比如高并发的这些问题,io的这些问题,确实因为现有技术原因解决不了,所以我们都会选择绕过正面去解决,比如通过加机器来提高系统并发等。
所以说,有这种绕过的思维是好的,但不能养成稍微一不会就想着怎么绕过,我们还是要对技术有最基本的探索精神的。

mysql 报错解决思考Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column相关推荐

  1. 报错,> 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column

    错误: mysql: select * ,count(*)as count from app_cash_trans_log group by app_cash_trans_log.tran_code ...

  2. MySQL Expression 2 of SELECT list is not in GROUP BY clause and contains nonaggregated column yous

    MySQL:Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'yous ...

  3. 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'cre

    sql语句 SELECT * FROM t_company_change_log WHERE company_id='257949626441666560' AND rec_status='N' GR ...

  4. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column

    场景 安装了mysql5.7,用group by 查询时抛出如下异常: Expression #1 of SELECT list is not in GROUP BY clause and conta ...

  5. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo.

    安装了mysql5.7,用group by 查询时抛出如下异常: Expression #3 of SELECT list is not in GROUP BY clause and contains ...

  6. Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column

    mysql 5.7 以上版本默认开启 ONLY_FULL_GROUP_BY: 在这个模式下,我们使用分组查询时,出现在select字段后面的只能是group by后面的分组字段,或使用聚合函数包裹着的 ...

  7. 使用group by语句时,报错,获取不到数据,出现SELECT list is not in GROUP BY clause and contains nonaggregated column 问题

    SELECT list is not in GROUP BY clause and contains nonaggregated column 报错如下: Expression #2 of SELEC ...

  8. 解决SELECT list is not in GROUP BY clause and contains nonaggregated column..

    问题描述 在一次zabbix的mysql库中写联合查询语句时报错 1055 - Expression #1 of SELECT list is not in GROUP BY clause and c ...

  9. mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nonaggregated column.

    mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nonaggregated column. 出现原因 使用g ...

最新文章

  1. tomcat的访问日志
  2. 机器人学习--ROS/AMCL实现初始化粒子撒满整张地图和分步收敛
  3. Excel-开发者工具(WPS)
  4. 发布订阅之direct
  5. JAVA确保垃圾回收后结束程序_Java垃圾回收机制(转)
  6. NOIP2016 D2T3 愤怒的小鸟
  7. zoj 1406 Jungle Roads
  8. 前端面试汇总(Bootstrap框架)
  9. 在taobao上安家了,欢迎大家来选购呀
  10. 基于Pytorch的BERT-IDCNN-BILSTM-CRF中文实体识别实现
  11. plus/digg_ajax.php,织梦dedecms首页添加digg顶一下的修改方法
  12. 免费的思维导图工具推荐(幕布-ProcessOn)2020年最新测评
  13. html仿qq截图,javascript实现粘贴qq截图功能(clipboardData)
  14. 医院病历html模板,三甲医院电子病历模板参考
  15. python设计一个二维向量类_鸢尾花——python如何实现支撑向量机模式分类(1)...
  16. QQ号被盗了申诉回来马上又被盗了怎么办
  17. Electron 开发入门
  18. 大数据领域一些值得读的论文(不断更新
  19. 关于linux的最新问题合集
  20. Latex 多图片排版--排版代码生成器

热门文章

  1. Java面试题:单例设计模式、适配器模式的不同方式
  2. windows下vagrant的安装使用
  3. 第二百一十九天 how can I 坚持
  4. 简单实现UITableView索引功能(中英文首字母索引)(一) ByH罗
  5. [原创]VS2013 EF6连接MySql需要几步?
  6. 【转】数据库设计:物理结构设计
  7. opacity:0.99;
  8. 计算机视觉——简介以及人脸数目检测
  9. 【剑指offer】面试题30:包含min函数的栈
  10. php中$tpl= add_member_info ;什么意思,DEDECMS会员信息在个人模板info和index的调用问题...