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.