我正在编写一个查询,我需要选择具有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
答案 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
来选择你的内容想要在外子查询中。