📅  最后修改于: 2023-12-03 15:28:34.590000             🧑  作者: Mango
在没有 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 子句中出现。否则就会出现上述错误。
要解决这个问题,可以尝试以下几种方法:
在 MySQL 5.7.5 之后,只需设置 sql_mode=TRADITIONAL 即可默认启用严格模式。可以通过以下命令查看当前的 sql_mode 设置:
SHOW VARIABLES LIKE 'sql_mode';
可以通过以下命令修改 sql_mode:
SET sql_mode = 'modes';
具体可选的 modes 可以参考 MySQL 官方文档:
将查询中的非聚合列添加到 GROUP BY 子句中即可解决问题,例如:
SELECT user, term, COUNT(term) AS count
FROM search_history
GROUP BY user, term;
如果不需要查询非聚合列,可以使用聚合函数替换它们,例如:
SELECT user, MAX(date), COUNT(term) AS count
FROM search_history
GROUP BY user;