在Mysql下使用Group by查询的时候会出现如下错误:
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'GT_SIGNATURE_STU.SINGN_STU_ID' 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 的问题。通过查找发现该模式对应的列必须有个聚合函数。
具体参见: https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
关于sql_mode的介绍,参见如下介绍:
MySQL的sql_mode合理设置
sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题
sql_mode常用值如下:
ONLY_FULL_GROUP_BY:
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
NO_AUTO_VALUE_ON_ZERO:
该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
STRICT_TRANS_TABLES:
在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
NO_ZERO_IN_DATE:
在严格模式下,不允许日期和月份为零
NO_ZERO_DATE:
设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
ERROR_FOR_DIVISION_BY_ZERO:
在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL
NO_AUTO_CREATE_USER:
禁止GRANT创建密码为空的用户
NO_ENGINE_SUBSTITUTION:
如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
PIPES_AS_CONCAT:
将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
ANSI_QUOTES:
启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符
相关推荐
MySQL版本问题,特别是关于`sql_mode=only_full_group_by`的设置,是一个常见的困扰开发者的问题。在MySQL中,`sql_mode`是一个变量,它定义了服务器执行SQL语句时遵循的规则集。`ONLY_FULL_GROUP_BY`是其中的一种...
在MySQL 5.7.9版本中,引入了一个新的默认SQL模式`ONLY_FULL_GROUP_BY`,这个模式旨在增强SQL查询的严谨性,防止在GROUP BY语句中出现未聚合的列,以避免不确定的结果。然而,这也导致了某些在旧版本中能够正常运行...
这是新建的一个测试表,同一天,同一时刻的有两条数据 ...set sql_mode = (SELECT REPLACE(@@sql_mode, ‘ONLY_FULL_GROUP_BY’, ‘’)); %y:表示显示两位的年份 %m:表示月份 %d:表示天数 这样就可以了。DATE_FORMAT()
案例一:ONLY_FULL_GROUP_BY 问题描述 MySQL版本从5.6升级至5.7之后,部分SQL执行报错,报错信息如下: ERROR 1055 (42000): Expression #3 of XXXXXX list is not in GROUP BY clause and contain
当`ONLY_FULL_GROUP_BY`启用时,如果你的查询包含未在`GROUP BY`中列出的非聚合列,MySQL会报错,例如错误代码`1055`。这个模式的目的是防止因不确定的行选择导致的不一致结果。在旧版本的MySQL中,可能会返回任意行...
this is incompatible with sql-mode=only-full-group-by
MySQL 5.7及以上版本引入了一个新的SQL标准模式`ONLY_FULL_GROUP_BY`,该模式旨在增强SQL查询的严格性,确保结果集的合法性。在早期的MySQL版本中,某些GROUP BY查询可以返回不确定的行数据,这在严格模式下是不允许...
本文主要关注的是几个常见的问题及其解决方案,包括因`sql_mode=only_full_group_by`导致的GROUP BY查询错误、清空表数据的方法,以及如何处理MySQL占用过多内存的情况。 首先,`sql_mode=only_full_group_by`是...
sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,PIPES_AS_CONCAT,ANSI_QUOTES' ``` 需要注意的是,MySQL...
MySQL 5.7引入了一项新的SQL模式,即`ONLY_FULL_GROUP_BY`,这导致了在升级后一些之前正常运行的SQL查询开始报错,错误代码1055。这个模式要求在`GROUP BY`子句中出现的所有列要么在`SELECT`列表中通过聚合函数(如`...
例如,如果你希望在当前会话中暂时关闭`ONLY_FULL_GROUP_BY`,可以运行`SET SESSION sql_mode = REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', '');`。 总之,理解和灵活运用`sql_mode`是MySQL管理员和开发者的重要...
这个错误提示表明你的查询违反了`ONLY_FULL_GROUP_BY`的SQL模式,这是MySQL 5.7.5及更高版本默认启用的一种严格模式。 `ONLY_FULL_GROUP_BY`模式的存在是为了确保查询结果的一致性和可预测性。在该模式下,MySQL不...
`sql_mode=only_full_group_by`是MySQL的一种严格模式,它确保了查询结果的可预测性和一致性,避免了因隐式聚合可能引发的不一致数据。在非严格模式下,MySQL可能会选择任意行的数据来代表每个组,而在严格模式下,...
在MySQL中,如果`sql_mode`包含了`ONLY_FULL_GROUP_BY`,则不允许在`SELECT`列表中出现未聚合的列。为了解决这个问题,我们需要修改`sql_mode`: ```sql SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE...