分组依据MAX()仍然选择其他行

时间:2017-07-25 02:30:44

标签: mysql sql group-by

我正在编写一个查询,我需要选择具有MAX gradelevel_id的学生姓名。然而,它仍然选择具有相同学生ID的另一行,我已经定义了我应该选择的gradelevel_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 CLAUSE中定义 307 ,仍然会选择我不应该在我的行中看到的学生姓名。

输出:

student_id | firstname | middlename | lastname | MAX(grade.gwa) 18 Billie Joe Armstrong 88

1 个答案:

答案 0 :(得分:0)

(这更像是评论)我猜你偶然发现GROUP BY的奇怪的MySQL行为。

使用GROUP BY时,在SELECT子句中,我们只能放置GROUP BY谓词(student_mt.student_id)和聚合函数(MAX(grade.gwa))。尽管MySQL允许这样做,但DBEngine会假设您知道自己在做什么,但可能会导致异常。

为什么不采取将student_id(pk) MAX(grade.gwa)作为内部子查询的方法,然后使用其他表格INNER JOIN来选择你的内容想要在外子查询中。