📌  相关文章
📜  错误代码:1140.在没有 GROUP BY 的聚合查询中,SELECT 列表的表达式 #3 包含非聚合列 'grepper_history.search_history.term';这与 sql_mode=only_full_group_by 不兼容 - SQL (1)

📅  最后修改于: 2023-12-03 15:28:34.590000             🧑  作者: Mango

错误代码:1140

在没有 GROUP BY 的聚合查询中,SELECT 列表的表达式 #3 包含非聚合列 'grepper_history.search_history.term';这与 sql_mode=only_full_group_by 不兼容

错误原因

这个错误是由于在 MySQL 中启用了严格模式 (sql_mode=only_full_group_by),它会对聚合函数进行更严格的限制,要求 SELECT 语句中的非聚合列必须在 GROUP BY 子句中出现。否则就会出现上述错误。

解决方法

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

1. 修改 sql_mode

在 MySQL 5.7.5 之后,只需设置 sql_mode=TRADITIONAL 即可默认启用严格模式。可以通过以下命令查看当前的 sql_mode 设置:

SHOW VARIABLES LIKE 'sql_mode';

可以通过以下命令修改 sql_mode:

SET sql_mode = 'modes';

具体可选的 modes 可以参考 MySQL 官方文档:

2. 添加 GROUP BY 子句

将查询中的非聚合列添加到 GROUP BY 子句中即可解决问题,例如:

SELECT user, term, COUNT(term) AS count
FROM search_history
GROUP BY user, term;
3. 使用聚合函数

如果不需要查询非聚合列,可以使用聚合函数替换它们,例如:

SELECT user, MAX(date), COUNT(term) AS count
FROM search_history
GROUP BY user;
参考链接