首页 >数据库 >mysql教程 >为什么 MySQL 会抛出'不在 GROUP BY 中”错误?

为什么 MySQL 会抛出'不在 GROUP BY 中”错误?

Susan Sarandon
Susan Sarandon原创
2024-12-05 12:15:13329浏览

Why Does MySQL Throw an

MySQL 的“不在 GROUP BY 中”错误:综合解释

当运行将 SELECT COUNT 和 SELECT 与 GROUP BY 组合在一起的 MySQL 查询时,它是可能会遇到结果数量差异的情况。这背后的原因通常是臭名昭著的错误消息,“‘field_name’不在 GROUP BY 中”。

要理解该错误,让我们分解问题:

MySQL 和 GROUP BY

GROUP BY 根据一个或多个指定列的值将行分组在一起。在我们的例子中,使用 GROUP BY 的查询具有类似 GROUP BY name 的子句。这意味着只有具有唯一名称值的行才会被分组。

SQL92 与 SQL99 与 MySQL

SQL92 最初要求 SELECT 子句中的所有列也位于 GROUP BY 子句中。然而,SQL99 放松了这一限制,允许在功能上依赖于 GROUP BY 列的列包含在 SELECT 子句中。

MySQL 默认情况下允许“部分分组依据”,这意味着它允许GROUP BY 子句中未显式显示的 SELECT 子句。但是,这可能会导致不确定的结果。

解决方案

要解决此问题,请确保 SELECT 子句中的所有列都是 GROUP BY 子句的一部分,或者在功能上依赖于它。在我们的示例中,需要将类型、语言和代码添加到 GROUP BY 子句中:

SELECT `name`, `type`, `language`, `code` 
FROM `users` 
WHERE `verified` = '1' 
GROUP BY `name`, `type`, `language`, `code` 
ORDER BY `count` DESC LIMIT 0, 25

Full Group By 与 Partial Group By

MySQL 还提供了一个设置,@ @sql_mode,可以设置为强制执行完整分组依据:

set @@sql_mode='ONLY_FULL_GROUP_BY';

使用此设置,任何没有完整分组依据的查询将导致错误。

以上是为什么 MySQL 会抛出'不在 GROUP BY 中”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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