📌  相关文章
📜  错误代码:1055.ORDER BY 子句的表达式#1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列 \\;这与 sql_mode=only_full_group_by 不兼容 - SQL (1)

📅  最后修改于: 2023-12-03 14:58:14.763000             🧑  作者: Mango

错误代码:1055.ORDER BY 子句的表达式#1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列 \;这与 sql_mode=only_full_group_by 不兼容 - SQL

错误说明

这个错误提示表明,查询语句中的 ORDER BY 子句中的表达式 #1 不在 GROUP BY 子句中,而且这个表达式中包含了非聚合列,而且这些非聚合列与 GROUP BY 子句中的列功能上不相关。这个问题的根源在于 sql_mode=only_full_group_by,在这个模式下,MySQL 的 GROUP BY 语句必须包含所有非聚合列。

解决方案

为了解决这个问题,可以采取以下几种措施:

  1. 将查询语句中的 ORDER BY 子句中的非聚合列移除;
  2. 在 GROUP BY 子句中包含所有的非聚合列;
  3. 关闭 sql_mode=only_full_group_by。

其中,关闭 sql_mode=only_full_group_by 可能会对数据的统计结果产生一定的影响,因此需要慎重考虑。建议采取第一、第二种方式解决这个问题。

示例代码
-- 错误示例
SELECT column1, column2, SUM(column3) 
FROM table1 
GROUP BY column1 
ORDER BY column2;

-- 正确示例
SELECT column1, column2, SUM(column3) 
FROM table1 
GROUP BY column1, column2 
ORDER BY column2;