首页 > 数据库 > mysql教程 > 为什么 MySQL 允许在 GROUP BY 查询中使用非聚合列?

为什么 MySQL 允许在 GROUP BY 查询中使用非聚合列?

Susan Sarandon
发布: 2024-12-07 05:57:15
原创
236 人浏览过

Why Does MySQL Allow Non-Aggregated Columns in GROUP BY Queries?

MySQL:了解 GROUP BY 中选择非聚合列的允许

在 MySQL 中,您可能会遇到允许使用如下视图的场景:

SELECT
     AVG(table_name.col1),
     AVG(table_name.col2),
     AVG(table_name.col3),
     table_name.personID,
     table_name.col4
FROM table_name
GROUP BY table_name.personID;
登录后复制

此查询包含 col1、col2 和 col3 的聚合函数,但它还选择col4 没有任何聚合。通常,这样的查询在 Microsoft SQL Server 等其他数据库系统中会被视为无效。

然而,在 MySQL 中,这种行为是允许的。理解原因很重要:

任意值选择

在 GROUP BY 查询中选择非聚合列时,MySQL 会从组中选择任意值。这通常对应于组中第一个存储的行的值。

不明确的查询

此功能可能会导致不明确的查询,其中非聚合列的选定值可能会有所不同按照组中行的顺序。例如,下面的查询可能会根据行排序为同一 personID 返回不同的 col4 值:

SELECT AVG(table1.col1), table1.personID, persons.col4
FROM table1 JOIN persons ON (table1.personID = persons.id)
GROUP BY table1.personID;
登录后复制

功能依赖

为了避免歧义,选择功能上的列至关重要取决于 GROUP BY 标准中的列。这意味着对于分组列的每个唯一值,“不明确”列应该只有一个可能的值。

ONLY_FULL_GROUP_BY 模式

MySQL 提供 ONLY_FULL_GROUP_BY SQL 模式,该模式可以启用使 MySQL 遵守 ANSI SQL 标准。在此模式下,在 GROUP BY 查询中选择非聚合列将导致错误,除非这些列在功能上依赖于分组列。

结论

虽然 MySQL 允许选择非聚合列由于 GROUP BY 查询中的聚合列,必须意识到可能出现不明确的结果。为了确保确定性查询,建议将它们重写为按功能相关列明确分组或启用 ONLY_FULL_GROUP_BY 模式。

以上是为什么 MySQL 允许在 GROUP BY 查询中使用非聚合列?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板