在 MySQL 8.0 中,出现该错误提示是因为默认启用了 ONLY_FULL_GROUP_BY SQL 模式。这个模式要求在 GROUP BY 语句中的每个列都必须在 SELECT 列表中出现或使用聚合函数进行聚合。

要完美解决这个问题,有几种方法可以尝试:

1、将 sql_mode 设置为非严格模式:可以在会话级别或全局级别修改 sql_mode,具体取决于你的需求。以下是在会话级别进行修改的示例:

SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

注意:这个方法可能会影响其他部分的代码,因为它会禁用其他严格模式的功能。

2、为非聚合的列添加聚合函数:可以将非聚合的列添加到 GROUP BY 子句中,或者使用聚合函数对这些列进行聚合。如下所示:

SELECT column1, MAX(column2) AS max_column2
FROM table
GROUP BY column1;

根据你的具体需求,选择适当的聚合函数。

3、使用 ANY_VALUE() 函数:另一种解决方法是使用 ANY_VALUE() 函数,该函数可以在 SELECT 语句中引用非聚合列,而无需在 GROUP BY 子句中包含它们。如下所示:

SELECT column1, ANY_VALUE(column2) AS column2
FROM table
GROUP BY column1;

ANY_VALUE() 函数会返回在给定组内的任意一个值。

通常建议采用第3种方式解决。