首页  >  文章  >  数据库  >  为什么我的没有 GROUP BY 的聚合查询会在 MySQL 5.7.14 中导致错误?

为什么我的没有 GROUP BY 的聚合查询会在 MySQL 5.7.14 中导致错误?

Barbara Streisand
Barbara Streisand原创
2024-11-01 03:39:02923浏览

Why Do My Aggregate Queries Without GROUP BY Cause Errors in MySQL 5.7.14 ?

不使用 GROUP BY 的聚合查询:了解错误和解决方案

以前,在旧版本的 MySQL 上,不使用 GROUP BY 子句的聚合查询函数(例如 COUNT())通常可以毫无问题地运行。但是,在 MySQL 5.7.14 及更高版本中,此类查询可能会遇到错误:

SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column [...]

此错误源于 MySQL 的默认行为的更改,以与其他 RDBMS 系统保持一致,这需要非聚合字段使用聚合函数时要包含在 GROUP BY 子句中的 SELECT 子句中。

解决错误:

要解决此错误,您有两个选项:

1。调整 MySQL 设置:

您可以通过修改 MySQL 的设置来恢复到旧版行为。但是,通常不建议这样做,因为它会延续非最佳查询实践。

2.修复查询:

首选解决方案是修改查询以在 GROUP BY 子句中包含非聚合列。例如,上面的查询可以重写为:

SELECT id, password, COUNT(id) AS count 
FROM users 
WHERE email = :email 
GROUP BY id, password 
LIMIT 1

Exception in 5.7.5 :

在 MySQL 5.7.5 版本及更高版本中,它仍然是当非聚合列被限制为单个值时(例如,在 WHERE 子句中使用过滤器),允许从 GROUP BY 子句中排除非聚合列。可以在此处找到此异常的详细信息和示例。

以上是为什么我的没有 GROUP BY 的聚合查询会在 MySQL 5.7.14 中导致错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn