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

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

迎江网站建设公司成都创新互联,迎江网站设计制作,有大型网站制作公司丰富经验。已为迎江1000多家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的迎江做网站的公司定做!

先简单复现我所写的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。


网站题目:mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nonaggregated column...原因及解决方案
本文URL:https://www.tyhkzb.com/article/dsoghgj.html
在线咨询
服务热线
服务热线:028-86922220
TOP