我在切换到拉曼SQL棒球数据库的离线版本时遇到了问题。我在使用嵌入到EDX课程中的终端。此命令在web终端上运行良好:
SELECT concat(m.nameFirst,concat(" ",m.nameLast)) as Player,
p.IPOuts/3 as IP,
p.W,p.L,p.H,p.BB,p.ER,p.SV,p.SO as K,
p.IPOuts+p.W*5+p.SV+p.SO-p.BB-p.L-p.H as PTS,
p.yearID as Year
FROM Pitching p
Inner Join Master m
ON p.playerID=m.playerID
WHERE p.yearID=2014 AND p.IPOuts>=50
GROUP BY m.playerID
ORDER BY PTS DESC;
它运行的是SQL 5.5.46,但当我使用运行5.7.10的离线版本时,我得到以下错误代码:
错误代码: 1055。选择列表的表达式#1不在GROUP BY子句中,它包含非聚合列“”stats.m.nameFirst“”,该列在函数上不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容
我已经阅读了很多关于人们问题的解决方案,但它们在这种情况下并没有帮助。这在以前从来没有发生过,所以我认为这要么是非常明显的,要么是我在编码方面越来越好。不管怎样,有人知道怎么解决这个问题吗?
发布于 2016-03-25 02:35:40
在5.7中,sqlmode默认设置为:
ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
要删除子句ONLY_FULL_GROUP_BY,可以执行以下操作:
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
假设您需要使用非聚合列进行分组。
问候
发布于 2016-12-18 17:53:20
上面接受的解决方案在我的5.7.9, for osx10.9 (x86_64)
版本上不起作用。
然后,下面的方法起作用了-
set global sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
发布于 2018-04-29 01:42:54
对于其他用例:如果ONLY_FULL_GROUP_BY
不是t的主键或唯一的非空列,则不一定要禁用名称。在这种情况下,无法推断函数依赖,并出现错误:
SELECT name, address, MAX(age) FROM t GROUP BY name;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP
BY clause and contains nonaggregated column 'mydb.t.address' which
is not functionally dependent on columns in GROUP BY clause; this
is incompatible with sql_mode=only_full_group_by
相反,您可以使用这个ANY_VALUE('my_column_name') my_column_name
引用mysql文档,“在这种情况下,MySQL忽略每个名称组中地址值的不确定性,并接受查询。”使用ANY_VALUE()来引用地址:
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
https://stackoverflow.com/questions/36207042
复制相似问题