full_group 报错
时间: 2023-12-01 14:02:40 浏览: 30
full_group报错是由于MySQL5.7及以上版本默认设置了mysql sql_mode属性为only_full_group_by导致的。这个属性要求在使用group by聚合操作时,select中的列必须都在group by中出现,否则会报错。要解决这个报错,可以在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'。这样设置后就可以避免full_group报错了。
相关问题
division by zero_MySql报错only_full_group_by的解决办法
这个错误是由于MySQL的版本更新所导致的,MySQL默认情况下在使用GROUP BY聚合函数时会进行严格模式的检查,只允许SELECT语句中的列出现在GROUP BY子句中或者使用聚合函数进行计算。
解决这个问题可以在MySQL的配置文件中或者在查询时设置SQL_MODE为非严格模式,具体方法如下:
1. 修改MySQL的配置文件my.cnf,在[mysqld]下添加以下内容:
```
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
```
2. 在查询时设置SQL_MODE,如下所示:
```
SET SQL_MODE='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
```
以上两种方法都可以解决这个问题,建议使用第一种方法对MySQL进行全局的设置。
mysql group by 报错only_full_group_by
在MySQL中,当使用GROUP BY语句进行分组查询时,如果SELECT列表中的列不在GROUP BY子句中,并且这些列不是函数依赖于GROUP BY子句中的列,就会出现"Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column"的错误。这是因为MySQL的sql_mode设置为only_full_group_by,要求SELECT列表中的列必须在GROUP BY子句中或者是聚合函数的参数。
解决这个问题的方法有多种,其中一种方法是使用ANY_VALUE()函数来抑制ONLY_FULL_GROUP_BY值被拒绝。ANY_VALUE()函数可以用于选择GROUP BY子句中的任意一个值作为结果。
下面是一个示例,演示了如何使用ANY_VALUE()函数来解决"only_full_group_by"报错:
```sql
SELECT ANY_VALUE(info_id) as info_id, data_no
FROM ath_tag
WHERE locate(tag_name,'疾病')
GROUP BY data_no;
```
这个查询将选择每个data_no分组中的任意一个info_id值作为结果,从而避免了"only_full_group_by"报错。