MySQL 无需聚合的 GROUP BY 查询的独特方法
与 Oracle 和 SQL Server 等数据库系统不同,MySQL 允许使用不附带聚合函数的 GROUP BY
子句。 这与标准 SQL 行为形成鲜明对比,在标准 SQL 行为中,此类查询通常会导致错误。 关键问题是:MySQL 如何处理结果集中的非聚合列?
MySQL 从每个组的非聚合列中选择任意值。 该值通常(但并非总是)是该组中第一个遇到的值。 此行为背后的基本原理源于这样的假设:如果列未聚合或属于分组的一部分,则将其包含在 SELECT
列表中可能是任意的。 因此,MySQL 只是返回一个代表值。
ANSI 合规性和 only_full_group_by
设置
这种轻松的 GROUP BY
方法偏离了 ANSI SQL 标准。 MySQL 通过提供 only_full_group_by
SQL 模式来解决这个问题。启用此模式会强制执行严格的 ANSI SQL 合规性,要求所有非聚合列都包含在 GROUP BY
子句中。 这确保了查询结果可预测且符合标准。
为什么 MySQL 选择这种方法
在 MySQL 中允许非聚合 GROUP BY
查询的决定优先考虑性能和易用性。 正如 MySQL 5.0 手册中所述,这种设计简化了查询处理,减少了计算开销并提供了更直接的用户体验。 它允许高效的数据检索,而无需显式聚合操作的复杂性。
以上是MySQL 如何处理 GROUP BY 查询中的非聚合列?的详细内容。更多信息请关注PHP中文网其他相关文章!