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?请参阅