首页 >数据库 >mysql教程 >如何解决MySQL的'不在GROUP BY中”错误?

如何解决MySQL的'不在GROUP BY中”错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-20 04:56:18395浏览

How to Resolve MySQL's

MySQL“不在 GROUP BY 中”错误

当您在 SELECT 子句中包含非聚合列时,会出现此错误使用不满足 group by 要求的 GROUP BY 子句的查询。在本例中,查询:

SELECT `name`, `type`, `language`, `code` 
FROM `users` 
WHERE `verified` = '1' 
GROUP BY `name` 
ORDER BY `count` DESC LIMIT 0, 25

会触发错误,因为 GROUP BY 中不包含类型、语言和代码。要解决此问题,您需要将所有非聚合列按要求合并到组中:

SELECT `name`, `type`, `language`, `code` 
FROM `users` 
WHERE `verified` = '1' 
GROUP BY `name`, `type`, `language`, `code` 
ORDER BY `count` DESC LIMIT 0, 25

SQL Group By 要求

SQL92 规定引用的每个列SELECT 子句中的聚合函数之外的内容必须包含在 GROUP BY 子句中。然而,SQL99 放宽了这一要求,规定这些列在功能上必须依赖于 group by 子句。

MySQL Group By 行为

MySQL 允许部分 group by默认值,这可能会导致不确定的结果。例如,考虑以下查询:

create table t (x int, y int);
insert into t (x,y) values (1,1),(1,2),(1,3);
select x,y from t group by x;

此查询可能会为每个 x 组返回随机 y 值,如以下输出所示:

+------+------+
| x    | y    |
+------+------+
|    1 |    1 |
+------+------+

防止Partial Group By

为了防止这种不确定的行为,您可以将 @@sql_mode 设置为'ONLY_FULL_GROUP_BY':

set @@sql_mode='ONLY_FULL_GROUP_BY';
select x,y from t group by x; 
ERROR 1055 (42000): 'test.t.y' isn't in GROUP BY

以上是如何解决MySQL的'不在GROUP BY中”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn