在MySQL 5.7及以上版本启用only_full_group_by模式时,如何编写GROUP BY查询并避免'Expression#1 of ORDER BY clause is not in GROUP BY clause'错误?
时间: 2024-11-01 17:00:50 浏览: 58
启用`only_full_group_by`模式后,MySQL要求所有非聚合列必须包含在`GROUP BY`子句中,否则会抛出错误。为了解决这个问题,我们可以采取以下步骤:
参考资源链接:[MySQL 5.7 only_full_group_by模式详解与解决方案](https://wenku.csdn.net/doc/6412b5c6be7fbd1778d44593?spm=1055.2569.3001.10343)
1. 确认当前的`sql_mode`设置,了解是否启用了`only_full_group_by`:
```sql
SELECT @@global.sql_mode;
```
2. 如果发现`only_full_group_by`模式已启用,你可以选择将其从当前`sql_mode`配置中移除,以避免在编写查询时遇到不必要的麻烦:
```sql
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
```
注意,这只会在当前会话中移除该模式。如果你想要永久更改,需要编辑MySQL配置文件并重启服务。
3. 在编写`GROUP BY`查询时,要确保所有非聚合列要么在`GROUP BY`子句中明确列出,要么使用`any_value()`函数来避免错误。例如:
```sql
SELECT
column1,
column2,
COUNT(*) AS count
FROM
your_table
GROUP BY
column1, column2
ORDER BY
any_value(non_grouped_column) DESC;
```
这里`any_value(non_grouped_column)`允许你在`ORDER BY`子句中使用未在`GROUP BY`中列出的`non_grouped_column`,并且不会产生错误。
通过这些步骤,即使在`only_full_group_by`模式下,你也可以灵活地编写`GROUP BY`查询,同时避免常见的错误提示。如果你需要更深入地理解`only_full_group_by`模式及其解决方案,强烈建议阅读《MySQL 5.7 only_full_group_by模式详解与解决方案》一书。该书不仅详细解释了`only_full_group_by`模式的工作原理,还提供了多种实际案例和解决策略,帮助你更好地理解和应用这些知识。
参考资源链接:[MySQL 5.7 only_full_group_by模式详解与解决方案](https://wenku.csdn.net/doc/6412b5c6be7fbd1778d44593?spm=1055.2569.3001.10343)
阅读全文
相关推荐















