Hello! 欢迎来到小浪云!


MySQL 分组查询中 GROUP BY 要求:何时需要禁用 ONLY_FULL_GROUP_BY 模式?


avatar
小浪云 2024-11-09 39

MySQL 分组查询中 GROUP BY 要求:何时需要禁用 ONLY_FULL_GROUP_BY 模式?

mysql 分组查询中的 group by 要求

mysql 中执行分组查询时,通常需要在 group by 子句中指定 select 语句中涉及的所有非聚合列。然而,某些情况下,您可能会发现这一要求并不严格。

默认情况下,从 mysql 5.7 开始,only_full_group_by 模式已启用。在这种模式下,所有非聚合列都必须出现在 group by 子句中。这有助于确保结果的正确性和一致性。

但是,您可以选择禁用 only_full_group_by 模式。为此,请将 only_full_group_by 选项从 sql_mode 设置中删除。禁用后,mysql 将不再强制执行 group by 中的完整字段列表。

例1:使用 only_full_group_by 模式

select * from table_name group by column1; -- 会抛出错误,因为 column2 未包含在 group by 子句中
登录后复制

例2:禁用 only_full_group_by 模式

SET SQL_MODE = 'ALLOW_PARTIAL_GROUP_BY';  SELECT * FROM table_name GROUP BY column1, column3; -- 不会抛出错误,group by 允许部分字段
登录后复制

需要注意的是,禁用 only_full_group_by 模式可能会对查询结果的准确性产生负面影响。 dlatego disarankan untuk menggunakan modenya hanya jika benar-benar diperlukan.

相关阅读