Mysql Group by with MAX()仍选择其他行

Mysql Group by with MAX()仍选择其他行,mysql,sql,group-by,Mysql,Sql,Group By,我正在写一个查询,我需要根据谁拥有MAXgradelevel\u id来选择学生姓名。不管怎样,它仍然选择另一行,该行与我已经定义了我应该选择的gradelevel\u id的学生id相同 schoolyear_id | student_id | gradelevel_id 407 18 307 409 18 309` 查询: SELECT student_mt.student_id, regist

我正在写一个查询,我需要根据谁拥有
MAX
gradelevel\u id
来选择学生姓名。不管怎样,它仍然选择另一行,该行与我已经定义了我应该选择的
gradelevel\u id
的学生id相同

schoolyear_id | student_id | gradelevel_id
 407            18            307
 409            18            309`
查询:

SELECT 
student_mt.student_id, 
registration_mt.firstname, registration_mt.middlename, registration_mt.lastname,
MAX(grade.gwa)

FROM schoolyear_student_lt

INNER JOIN gradelevel_mt ON gradelevel_mt.gradelevel_id = schoolyear_student_lt.gradelevel_id
INNER JOIN student_mt ON student_mt.student_id = schoolyear_student_lt.student_id
INNER JOIN registration_mt ON registration_mt.registration_id = student_mt.registration_id
INNER JOIN student_grade ON student_grade.student_id = schoolyear_student_lt.student_id
INNER JOIN grade ON grade.grade_id = student_grade.grade_id

WHERE gradelevel_mt.gradelevel_id = 309

GROUP BY student_mt.student_id;
如果我在我的
WHERE子句中定义了307,则仍然选择了我不应该在我的行中看到的学生姓名

输出:

student|u id | firstname | middlename | lastname | MAX(grade.gwa)
18 Billie Joe Armstrong 88

(这更多的是一个评论)我猜你无意中发现了
GROUP BY
的古怪MySQL行为

使用
分组依据
时,在
选择
子句中,我们只能将
分组依据
谓词(
student\mt.student\u id
)和聚合函数(
MAX(grade.gwa)
)。尽管MySQL允许这样做,但DBEngine假定您知道自己在做什么,但可能会导致异常


为什么不使用获取
MAX(grade.gwa)
student\u id(pk)
的方法作为内部子查询,然后与其他表进行
内部连接,以选择外部子查询中需要的内容。

为什么不包括registration\mt.firstname、registration\mt.middlename、,您的组中的注册人\u mt.lastname?请参阅