mysql5.7版本group by错误提示 #1055

在MySQL5.7版本中,由于默认启用ONLY_FULL_GROUP_BY模式,使用group by时会出现错误#1055。解决方法是在查询中加入ANY_VALUE()函数。SQL MODE包括对SQL语法的支持和数据验证规则,ONLY_FULL_GROUP_BY要求GROUP BY语句中所有列都在SELECT或HAVING中出现,避免数据矛盾。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于group by使用MySQL提示错误 “#1055”

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 't1.create_time' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原因

因为在5.7版本中默认使用了 ONLY_FULL_GROUP_BY 作为 SQL MODE

解决方案

为你的查询结果添加函数ANY_VALUE(),这个函数干嘛的呢

You can think of this ANY_VALUE() function as a strange a kind of aggregate function. Instead of returning a count, sum, or maximum, it instructs the MySQL server to choose, arbitrarily, one value from the group in question. It's a way of working around Error 1055.

您可以将此ANY_VALUE()函数视为一种奇怪的聚合函数。它不是返回计数,总和或最大值,而是指示MySQL服务器从所讨论的组中任意选择一个值。这是一种解决错误1055的方法。

延申

那么什么是所谓的SQL MODE?
翻译成中文大意为数据库模式,官方说法是为了让数据库与环境更加契合

Modes affect the SQL syntax MySQL supports and the data validation checks it performs. This makes it easier to use MySQL in different environments and to use MySQL together with other database servers.

SQL Mode 定义了两个方面:MySQL应支持的SQL语法,以及应该在数据上执行何种确认检查。
而 ONLY_FULL_GROUP_BY 恰好是对于GROUP BY聚合操作,如果在SELECT中的列、HAVING或者ORDER BY子句的列,没有在GROUP BY中出现,那么这个SQL是不合法的。是可以理解的,因为不在 group by 的列查出来展示会有矛盾。
参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值