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中文网其他相关文章!