我有下表:
students:
name: semester:
AAAA 1
BBBB 2
CCCC 3
DDDD 4
其中students是表的名称,name和semperm是列。
我想选择所有的名字和学期数上限。因此,我使用以下sql语句:
SELECT MAX(semester), name FROM students;
结果我得到了正确的最大学期数,但只有名字。
为什么它只返回一个名称,为什么返回表的第一个名称(而不是最大学期数的名称)?
我不感兴趣的是如何解决这个问题,但为什么它会这样。
我用的是mariadb 10.4.11。
2条答案
按热度按时间iih3973s1#
它的行为是这样的,因为您使用的是允许错误查询的mysql的旧版本。
为什么查询格式不正确?您的聚合查询没有
GROUP BY
,因此它返回一行。但是,name
不是聚合的——可能数据库中有多个名称。mysql曾经全心全意地支持这种语法,但是返回一个任意值
name
. 现在需要设置一个配置参数才能使用它。cxfofazt2#
你必须使用
GROUP BY
将每个名称分组。否则它将聚合整个表,当然只返回一行。