MySql--ONLY_FULL_GROUP_BY
摘要
-
MySql知识点介绍:ONLY_FULL_GROUP_BY
-
本文基于
mysql-8.0.30
,https://dev.mysql.com/doc/refman/8.0/en/
ONLY_FULL_GROUP_BY
-
MySql5.7.5及以上版本将
sql_mode
的ONLY_FULL_GROUP_BY
模式默认设置为打开状态,会导致一些错误 -
当使用GROUP BY查询时,出现在SELECT字段后面的只能是GROUP BY后面的分组字段,或使用聚合函数包裹着的字段,否则会报错如下信息:
1 | Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'database.table.column' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by |
-
当使用ORDER BY查询时,不能使用SELECT DISTINCT去重查询。否则会报错如下信息:
1 | Expression #1 of ORDER BY clause is not in SELECT list, references column 'database.table.column' which is not in SELECT list; this is incompatible with DISTINCT |
禁用ONLY_FULL_GROUP_BY
1 | # 查询 |
以下为sql_mode常用值的含义
1 | ONLY_FULL_GROUP_BY:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中 |
也可是使用 ANY_VALUE()函数
来解决查询属性没有出现在group by中的情况,此时即使没有禁用ONLY_FULL_GROUP_BY也不会报错。
1 | select update_time,any_value(name),count(*) from actor group by update_time; |