百木园-与人分享,
就是让自己快乐。

mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nonaggregated column...原因及解决方案

在项目中需要用到group by进行聚合计算,在计算的同时也要查出一些其他字段来返回给前端。于是就有了这个错误的出现。

先简单复现我所写的sql,其实sql非常简单。

select
channel_name as channelName,
brand_name as brandName,
sum(actual_value) as actualValue,
sum(actual_value_ty) as actualValueTy,
sum(actual_value_ly) as actualValueLy,
sum(target_value) as targetValue
from bu_channel_base_performance
group by channel_name
然后就是这样一段sql在运行时候报错如标题所示,

这种模式的官方解释:ONLY_FULL_GROUP_BY是MySQL数据库提供的一个sql_mode, 通过这个 sql_mode 来保证, SQL语句 “分组求最值” 合法性的检查. 这种模式采用了与 Oracle、DB2 等数据库的处理方式。即不允许 select target list 中出现语义不明确的列.
对于用到 GROUP BY 的 select 语句, 查出来的列必须是 group by 后面声明的列, 或者是聚合函数里面的列有这样一个数据库的表.
因此,这种模式的特点是:

1:只要有聚合函数 sum(),count(),max(),avg() 等函数就需要用到 group by , 否则就会报上面的错误.
2:group by id (id 是主键) 的时候, select 什么都没有问题, 包括有聚合函数.
3:group by role (非主键) 的时候, select 只能是聚合函数和 role ( group by 的字段) , 否则报错

 

而解决方案,大家则都是给出了相同的方案,修改mysql配置文件,即:

select @@sql_mode;
先查看自己mysql的mode配置,一般不出意外都是:ONLY_FULL_GROUP_BY。

此时,方案就是修改sql_mode:

sql_mode=\"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION\"

倘若你通过修改sql能够解决问题而不影响你的结果,那么个人认为最好是优先修改sql。

作者:子钦加油
出处:https://www.cnblogs.com/zmdComeOn/
个性签名:努力生活,努力走路
阿里云拼团:https://www.aliyun.com/1111/home?userCode=f4ee1llo1核2G1M,86一年,229三年;2核4G5M,799三年;2核8G5M,1399三年
腾讯云三月采购计划特价:https://cloud.tencent.com/act/cps/redirect?redirect=1073&cps_key=15d0b1673287c43fe946626d9f4e2eee&from=console1核2G1M,88一年;1核2G1M,268三年;2核4G5M,998一年;4核8G5M,2888元三年

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...原因及解决方案

如果,想给予我更多的鼓励,求打


来源:https://www.cnblogs.com/zmdComeOn/p/16061090.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nonaggregated column...原因及解决方案

相关推荐

  • 暂无文章