MySQL报错“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
报错解释:
MySQL的严格模式在5.7.5及以上版本默认开启,这会导致对SQL语句的严格校验。当你在SELECT查询中使用聚合函数(如SUM(), COUNT()等)时,如果SELECT列表中的某个表达式(如函数、列)不是GROUP BY子句的一部分,且没有与之对应的聚合函数,MySQL的严格模式会报错。
解决方法:
- 如果你确实需要对该列进行分组,那么应该在GROUP BY子句中包含该列。
- 如果你不需要对该列进行分组,而只是需要获取该列的一个值,那么可以使用任何聚合函数(如MAX(), MIN(), ANY\_VALUE()等)来包含该列。
- 可以临时关闭严格模式,但不推荐这样做,因为这只是隐藏了问题,不会解决根本问题。
- 可以修改MySQL的sql\_mode配置,去除ONLY\_FULL\_GROUP\_BY,但这样做可能会影响到其他的SQL校验规则。
示例代码:
-- 假设我们有错误的SQL如下:
SELECT COUNT(*), column_name FROM table_name GROUP BY column_name;
-- 解决方法1:在GROUP BY中包含所有SELECT中的非聚合列
SELECT COUNT(*), column_name FROM table_name GROUP BY column_name;
-- 解决方法2:使用聚合函数来包含该列
SELECT COUNT(*), MAX(column_name) FROM table_name GROUP BY column_name;
评论已关闭