MySQL:在 window 函数中使用 MAX 未返回最大值

MySQL: Using MAX in a window function not returning highest values

我正在寻找每个 student_id 的最高成绩。 年级分数保存在这个 table:

注册人数table:

student_id course_id 等级
2 2 95
2 3 95
1 1 90
1 2 99
3 1 80
3 2 75
3 3 82

正确的结果应该是:

student_id course_id 等级
1 2 99
2 2 95
3 3 82

这是我正在尝试的查询:

SELECT student_id, course_id, grade
 FROM Enrollments
 GROUP BY student_id
 HAVING grade = (SELECT MAX(grade) OVER(PARTITION BY student_id))
 ORDER BY student_id ASC    

但是对于这个查询,我得到的结果是:

student_id course_id 等级
1 2 90
2 2 95
3 3 80

即学生1的成绩是90,应该是99,学生2的成绩是80,应该是82.

问题似乎是此查询仅从 table 中的第一个 course_id 中选择最高成绩,但我不确定为什么会这样。

请试试这个查询。

SELECT e.student_id, e.course_id, e.grade
FROM Enrollments e INNER JOIN 
(SELECT student_id as student_id, MAX(grade) as grade FROM Enrollments GROUP BY student_id) sbq 
ON e.student_id = sbq.student_id
WHERE e.grade = sbq.grade;

您可以使用 row_number,以获得您想要的结果

CREATE TABLE Table1
    (`student_id` int, `course_id` int, `grade` int)
;
INSERT INTO Table1
    (`student_id`, `course_id`, `grade`)
VALUES
    (2, 2, 95),
    (2, 3, 95),
    (1, 1, 90),
    (1, 2, 99),
    (3, 1, 80),
    (3, 2, 75),
    (3, 3, 82)
;
SELECT `student_id`, `course_id`, `grade`
FROM (SELECT `student_id`, `course_id`, `grade`
, ROW_NUMBER() OVER(PARTITION BY `student_id` ORDER BY `grade` DESC) rn
FROM Table1) t1
WHERE rn= 1
student_id | course_id | grade
---------: | --------: | ----:
         1 |         2 |    99
         2 |         2 |    95
         3 |         3 |    82

db<>fiddle here