五分钟内反应回复,平均十分钟解决任何IT技术问题,按难度跟工作量收费!

In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'ce

疯狂的小程序员 |浏览376次 |售价:0元 |联系博客主
收藏|2020/12/21 15:18

select sum(a.chishu) as cs,count(a.id) as dd from  youlanjilu a left join dede_member m on a.mid = m.mid where a.tjrmid = '3'


这样写不会报错

但是:

select m.uname,count(a.id) as dd from  youlanjilu a left join dede_member m on a.mid = m.mid where a.tjrmid = '3'

就会报错:

In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'ceshi.m.uname'; this is incompatible with sql_mode=only_full_group_by


这是因为,only_full_group_by,用join函数时,你select查询出来的数据,必须同时是聚合函数或者同时是普通查询!!比如:sum,count,max等聚合函数!普通查询跟聚合查询同时存在的时候是查询不了的


也就是说:以下这样查询也是可以的

select m.uname,a.id  from  youlanjilu a left join dede_member m on a.mid = m.mid where a.tjrmid = '3'



如果想聚合函数跟普通查询同时存在,那么有以下两种方法:

1、执行SET GLOBAL sql_mode = ''; 把sql_mode 改成非only_full_group_by模式。验证是否生效 SELECT @@GLOBAL.sql_mode 或 SELECT @@sql_mode
SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';    #这种方式只对当前会话有效。
2、如果想要全局生效,需要修改my.cnf配置文件在mysqld组里面添加如下值,然后重启mysql
sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

咨询/回复该博客即可获得 2 经验值,咨询/回复被采纳即可获得 2 经验值!
咨询/回复

验证码

  换一个
全部回答(0)
该博客主的其他博客文章
+1
 加载中...