记一次Group by 查询时的ONLY_FULL_GROUP_BY错误以及后续_深寒色的猫丶的博客-CSDN博客


本站和网页 https://blog.csdn.net/Abysscarry/article/details/79468411 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

记一次Group by 查询时的ONLY_FULL_GROUP_BY错误以及后续_深寒色的猫丶的博客-CSDN博客
记一次Group by 查询时的ONLY_FULL_GROUP_BY错误以及后续
深寒色的猫丶
于 2018-03-07 11:12:11 发布
32929
收藏
29
分类专栏:
mysql
文章标签:
mysql
group by
sql_mode
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Abysscarry/article/details/79468411
版权
mysql
专栏收录该内容
7 篇文章
0 订阅
订阅专栏
所用mysql版本为5.7.20
1.错误源头
Error querying database. Cause:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'cis.q1.query_date'
which is not functionally dependent on columns in GROUP BY clause;
this is incompatible with sql_mode=only_full_group_by
通过报错信息可以看到是 sql_mode=only_full_group_by 问题, 于是我们在mysql命令行输入:select @@sql_mode 查询当前数据库的默认sql_mode: 可以看到,默认sql_mode中的确存在 only_full_group_by 这个配置,那么,这到底指的是什么意思呢?
2. sql_mode 配置解析
ONLY_FULL_GROUP_BY 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。简而言之,就是SELECT后面接的列必须被GROUP BY后面接的列所包含。如: select a,b from table group by a,b,c; (正确) select a,b,c from table group by a,b; (错误) 这个配置会使得GROUP BY语句环境变得十分狭窄,所以一般都不加这个配置NO_AUTO_VALUE_ON_ZERO 该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。(不信的可以试试,默认的sql_mode你在自增主键列设置为0,该字段会自动变为最新的自增值,效果和null一样),如果用户希望插入的值为0(不改变),该列又是自增长的,那么这个选项就有用了。STRICT_TRANS_TABLES 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制。(InnoDB默认事务表,MyISAM默认非事务表;MySQL事务表支持将批处理当做一个完整的任务统一提交或回滚,即对包含在事务中的多条语句要么全执行,要么全部不执行。非事务表则不支持此种操作,批处理中的语句如果遇到错误,在错误前的语句执行成功,之后的则不执行;MySQL事务表有表锁与行锁非事务表则只有表锁)NO_ZERO_IN_DATE 在严格模式下,不允许日期和月份为零NO_ZERO_DATE 设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。ERROR_FOR_DIVISION_BY_ZERO 在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULLNO_AUTO_CREATE_USER 禁止GRANT创建密码为空的用户NO_ENGINE_SUBSTITUTION 如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常PIPES_AS_CONCAT 将”||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似ANSI_QUOTES 启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符
3.解决办法
去掉 ONLY_FULL_GROUP_BY,重新设置值。
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.上面是改变了全局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';
或者: 在 my.cnf 里面设置:
[mysqld] sql_mode=’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’ 这个需要重启mysql服务! 然后后面就开始出错了。。
4.重启Mysql报错
这种 The server quit without updating PID file 错误在mysql启动配置中很常见,网上搜索一大堆,但这往往会误导你的判断,所以这时最好定位到mysql错误日志查看日志,根据自己设置的mysql datadir 路径,找到 主机名.err 文件(默认文件名为主机名),查看如下:
可以看到错误源头为 default-character-set=utf8 设置有问题!原来mysql 5.5之后貌似不兼容这个设置项了? [mysql] 项内可以这么写, [mysqld] 项内这么写在启动MySQL服务时会有错误;所以大家都用 character_set_server=utf8 来取代 default-character-set=utf8 ,故在 /etc/my.cnf 中改为character_set_server=utf8再重启就木有问题了。 (但我之前配置这个为什么没问题呢。。这是个问题)
最后说一句,启动时The server quit without updating PID file 这个错误大部分时候是由my.cnf配置文件引起的,不行,你删了再启动试试…
深寒色的猫丶
关注
关注
14
点赞
29
收藏
打赏
评论
记一次Group by 查询时的ONLY_FULL_GROUP_BY错误以及后续
所用mysql版本为5.7.201.错误源头Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #5 of SELECT list is not in GROUP BY clause and contains nona...
复制链接
扫一扫
专栏目录
真正有效解决ONLY_FULL_GROUP_BY的问题
索隆有几把刀的博客
09-19
7万+
有效解决ONLY_FULL_GROUP_BY的问题
问题描述
报错 如上图 在mysql 5.7版本下可能会报如下错误
Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘×××’ which is not functionally......
mySQL数据库 Group by 查询时的ONLY_FULL_GROUP_BY错误及解决
爱码士段先森的博客
10-28
757
所用mysql版本为5.7.20
1.错误源头
Error querying database. Cause:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
Expression #5 of S...
评论 8
您还未登录,请先
登录
后发表或查看评论
解决Mysql:1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated
最新发布
qq_42926722的博客
10-25
68
解决Mysql:1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated
group by后乱序问题原因和解决
weixin_43283487的博客
08-02
1227
group by后乱序问题原因和解决
1.问题
求用户的访问轨迹以特殊分隔符隔开(已经有数仓表记录用户访问顺序)
## 模仿一下数仓用户访问顺序表
CREATE TABLE IF NOT EXISTS tmp_t
uid STRING,
page_id STRING,
rn BIGINT
) ;
insert overwrite table tmp_t values
('u-1057','3305','1'),
('u-1057','3342','
Group by 查询时的ONLY_FULL_GROUP_BY错误解决
CYD2014的博客
10-15
300
报错信息:sql_mode=only_full_group_by
sql_mode 配置解析
ONLY_FULL_GROUP_BY
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。简而言之,就是SELECT后面接的列必须被GROUP BY后面接的列所包含。如:select a,b from table group by a,b,c; (正确)select a,b,c from table grou.
[Err] 1055 - Expression #4 of SELECT list is not in GROUP BY clause and contains nonaggregated colum
热门推荐
hhczy1003的专栏
08-23
1万+
这个错误发生在mysql 5.7.5 和以后上,因为5.7.5默认的sql模式配置是
ONLY_FULL_GROUP_BY,
这个配置启用的是 “严格ANSIsql 规则”,严格ANSI sql 规则要求在group by的时候,没有聚合的列,在group by的时候,必须全部包含在group by 的字段中。
没有聚合的列,指的是没有使用 max, min, count,
MySQL中的ONLY_FULL_GROUP_BY
无痕的博客
12-02
2788
从MySQL5.7版本默认设置了 mysql sql_mode = only_full_group_by 属性,规则核心原则如下,没有遵循原则的sql会被认为是不合法的sql
1. order by后面的列必须是在select后面存在的
2. select、having或order by后面存在的非聚合列必须全部在group by中存在
查看MySQL的sql_mode:
mysql> select@@GLOBAL.sql_mode;
...
1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘rea
weixin_43798579的博客
09-28
639
mysql报错
1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘realname.t_act_coding1.nin_coding’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_grou
[Mysql 报错] 解决MySQL:1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nona
汤圆的博客
09-30
1125
原因:
MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BYSQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL5.6参考手册”。)
先查询配置信息:
select @@global
MySQL中的only_full_group_by模式
Asurplus
09-23
4201
一、背景
ERROR 1055 (42000): Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘postscan.verifyDelayLog.auditor’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_f
MYSQL使用GROUP BY 时报错only_full_group_by的解决方法
qq_38091831的博客
11-19
225
mysqlGROUP BY时报以下错误:
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'pro_data.sy_epwk.grade' which is not functionally dependent on co...
Group by 查询时的ONLY_FULL_GROUP_BY错误
weixin_39252021的博客
12-16
64
Group by 查询时的ONLY_FULL_GROUP_BY错误
项目一开始使用的windows版本mysql(5.7.28),后来迁移到linux时,有一部分sql查询时出现ONLY_FULL_GROUP_BY的错误,原因是因为MySQL5.7版本默认设置了 mysql sql_mode = only_full_group_by 属性,导致报错(windows版没有默认设置)
...
MySQL使用GROUP BY分组查询报错 ,ONLY_FULL_GROUP_BY解决方案
少年一贯快马扬帆,道阻且长不转弯。要盛大,要绚烂,要哗然,要用理想的泰坦尼克,去撞现实冰川。要当烧赤壁的风,而非借箭草船,要为了一片海,就肯翻万山。
03-04
1610
ysql5.7及以后默认sql_mode=“ONLY_FULL_GROUP_BY”。
含义:
sql中select后面的字段必须出现在group by后面,或者被聚合函数包裹,不然会抛出上面的错误 如以下错误:
Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘×××’ which is not functionally dependent
解决MySQL的Group By之中ONLY_FULL_GROUP_BY
一颗浑身披带雪花的松树---[雪松]
04-08
2444
MySQL严格模式的ONLY_FULL_GROUP_BY解决办法
linux下mysql查询报错sql_mode=only_full_group_by
兴国-为梦想而战
07-30
3245
mysql 5.7中使用group by 会报如下错误: this is incompatible with sql_mode=only_full_group_by,这是因为mysql 默认启用了 ONLY_FULL_GROUP_BY
Cause: java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY XXX解决方案
weixin_51716950的博客
04-01
2217
由于SQL语句编写不规范,系统在进去首页是直接报错
由于SQL语句书写不造成的,
解决方案如下:
总结如下:
1.MySQL5.7之后,sql_mode中ONLY_FULL_GROUP_BY模式默认设置为打开状态。
2.ONLY_FULL_GROUP_BY的语义就是确定select target list中的所有列的值都是明确语义,简单的说来,在此模式下,target list中的值要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于group by list中的表
mysql sql_mode小分享
王鹏的专栏
07-17
528
mysql sql_mode参数小节
mysql,sql实例SELECT charges,mealstime,name,sd_meal.id,fixedcharges,balancecharges,payablecharges
FROM sd_meal,lcmemdata,sd_conservation
WHERE sd_meal.childuid=lcmemdata.childi
Error querying database. Cause: java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is no
dongxindadida的博客
12-02
1989
启动项目报错:
Error querying database. Cause: java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is no…
解决方法:
cmd root账号进入mysql
在mySQL里面执行命令
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
或者使用其他的连接工具连接上也可以(需要root权限);
...
sql报错SELECT list is not in GROUP BY clause and contains nonaggregated column
qq_40262372的博客
06-24
3942
高频面经汇总:https://blog.csdn.net/qq_40262372/article/details/116075528
一、问题分析
其中错误的原因是说group by哪一句中的select的字段是不对的。
二、情景还原
dept_emp表:
salaries表:
我想去查询每个部门人员薪水,于是写下了这样的sql:
select
de.dept_no ,s.salary
from
dept_emp de
left join
salaries s
on..
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
深寒色的猫丶
CSDN认证博客专家
CSDN认证企业博客
码龄6年
暂无认证
73
原创
2万+
周排名
111万+
总排名
103万+
访问
等级
6333
积分
665
粉丝
1057
获赞
326
评论
3732
收藏
私信
关注
热门文章
微信公众号开发基本流程
128767
多个单列索引和联合索引的区别详解
128502
Linux下部分删除history记录
67375
Hive中使用 with as 优化SQL
61797
SpringBoot项目的logback日志配置(包括打印mybatis的sql语句)
49702
分类专栏
一些感悟
2篇
汇编
1篇
大数据
21篇
java开发
33篇
elasticsearch
4篇
python
2篇
wordcloud
linux
6篇
spark
mysql
7篇
有意思的东西
算法
3篇
最新评论
关于Flume断点续传(防止重复消费)的解决方案
m0_48496065:
所以咋办啊,一会开文件一会又关了
多个单列索引和联合索引的区别详解
代码匠人~:
按照索引树的构建原理,如果8会走索引的话就有点不太合理了
多个单列索引和联合索引的区别详解
物尽其用之CS09851DN:
这里确实说的有问题吧,AND 查询前面测试案例不是只走一个索引吗,怎么这里又 index_merge 取交集了...
前后端分离架构下的登录系统设计(v1)
qq_34268814:
这还是20年的技术。。看了一下你最新的文档。感觉自己越发废物
微信公众号开发基本流程
shuaixinzhou:
请问jsp可以写吗
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
Soul 网关探索(一)基本介绍 & 环境配置
以后,要如何更好地输出博客?
深入一点谈谈进程和线程的区别
2021年1篇
2020年2篇
2019年15篇
2018年59篇
2017年1篇
目录
目录
分类专栏
一些感悟
2篇
汇编
1篇
大数据
21篇
java开发
33篇
elasticsearch
4篇
python
2篇
wordcloud
linux
6篇
spark
mysql
7篇
有意思的东西
算法
3篇
目录
评论 8
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
深寒色的猫丶
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值