MySQL中only_full_group_by限制如何确保查询结果完全基于分组?

2026-04-11 11:440阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1114个文字,预计阅读时间需要5分钟。

MySQL中only_full_group_by限制如何确保查询结果完全基于分组?

在SQL查询中,如果启用了`ONLY_FULL_GROUP_BY`选项,那么在进行查询时,如果某个列不在`GROUP BY`子句中,该列就不能出现在`SELECT`列表中、`HAVING`条件中或`ORDER BY`子句中。简单来说:

- 如果`ONLY_FULL_GROUP_BY`被启用,- 并且查询中使用了`GROUP BY`,- 那么任何不在`GROUP BY`列表中的列,- 都不能在查询结果中出现,- 不能用于`HAVING`条件,- 不能用于`ORDER BY`排序。

例如,如果你有一个查询:

sqlSELECT column1, column2 FROM table_name GROUP BY column1;

- 如果`column2`没有包含在`GROUP BY`子句中,那么`column2`的值在查询结果中是不确定的,可能无法出现。- 在`HAVING`子句中,不能使用`column2`来进行筛选。- 在`ORDER BY`子句中,不能按照`column2`进行排序。

先上结论

如果 only_full_group_by 被启用,那么在查询时,如果某个列不在group by 列表中,此时如果不对该列进行聚合处理,则该列不能出现在 select 列表,having 条件中及order by 列表中

MySQL 8.0 默认启用了sql_mode,我们可以通过 select @@session.sql_mode 查看会话中的 sql_mode 配置。

阅读全文

本文共计1114个文字,预计阅读时间需要5分钟。

MySQL中only_full_group_by限制如何确保查询结果完全基于分组?

在SQL查询中,如果启用了`ONLY_FULL_GROUP_BY`选项,那么在进行查询时,如果某个列不在`GROUP BY`子句中,该列就不能出现在`SELECT`列表中、`HAVING`条件中或`ORDER BY`子句中。简单来说:

- 如果`ONLY_FULL_GROUP_BY`被启用,- 并且查询中使用了`GROUP BY`,- 那么任何不在`GROUP BY`列表中的列,- 都不能在查询结果中出现,- 不能用于`HAVING`条件,- 不能用于`ORDER BY`排序。

例如,如果你有一个查询:

sqlSELECT column1, column2 FROM table_name GROUP BY column1;

- 如果`column2`没有包含在`GROUP BY`子句中,那么`column2`的值在查询结果中是不确定的,可能无法出现。- 在`HAVING`子句中,不能使用`column2`来进行筛选。- 在`ORDER BY`子句中,不能按照`column2`进行排序。

先上结论

如果 only_full_group_by 被启用,那么在查询时,如果某个列不在group by 列表中,此时如果不对该列进行聚合处理,则该列不能出现在 select 列表,having 条件中及order by 列表中

MySQL 8.0 默认启用了sql_mode,我们可以通过 select @@session.sql_mode 查看会话中的 sql_mode 配置。

阅读全文