only_full_group_by限制order
时间: 2023-11-25 21:52:23 浏览: 82
根据提供的引用内容[1],可以得知only_full_group_by规则对于group by的限制,但是并没有直接提到对order by的限制。在MySQL中,如果开启了only_full_group_by模式,那么在使用group by时,select语句中的列必须是group by子句中的列或者是聚合函数,否则会报错。而对于order by,只要在select语句中的列都可以在order by中使用,不受only_full_group_by的限制。
相关问题
sql_mode=only_full_group_by
在MySQL 5.7版本后,默认开启了SQL_MODE严格模式,其中一个选项是sql_mode=only_full_group_by。这个模式要求在进行group by聚合操作时,select语句中的列只能是出现在group by中的列或者使用聚合函数(如max()、min()等)。如果不符合这个规则,就会报错。
为了解决这个问题,你可以按照下面的方法进行操作:
1. 在MySQL配置文件中的[mysqld]模块下新增一行配置:sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'。这样可以将sql_mode的设置更改为允许使用所有的模式,包括only_full_group_by。
2. 修改你的SQL语句,确保select中的列要么是出现在group by中的列,要么是使用了聚合函数。例如,你可以修改你的SQL语句为:select uid from user_order group by uid; 这样就不会再报错了。
3. 如果你不想修改MySQL的全局配置,你可以在每个需要执行的SQL语句前加上SET sql_mode='';来临时关闭严格模式。这样在执行完这个语句后,严格模式就会恢复。但这种方法并不推荐,因为可能会导致其他的潜在问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [MySQL提示sql_mode=only_full_group_by解决办法](https://blog.csdn.net/M__L__/article/details/126806559)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
在MySQL 5.7及以上版本启用only_full_group_by模式时,如何编写GROUP BY查询并避免'Expression#1 of ORDER BY clause is not in GROUP BY clause'错误?
启用`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)
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)