mysql - 获得每个组的前 K 个选项

mysql - getting top K options per each group

在我使用 MySQL 的过程中,我遇到了很多机会来找到每个组的最佳 (max/min) 行。

例如 Table:

Grades(Student_ID, Course_ID, Grade)

要找到每个学生的顶级课程,我们可以使用相关子查询:

SELECT Student_ID, Course_ID
FROM Grades g1
WHERE Grade in (SELECT MAX(Grade)
                FROM Grades g2
                WHERE g1.Student_ID = g2.Student_ID)

但是 - 我怎样才能为 TOP K 课程做同样的事情?

I found this answer from related question,但它们使用的是变量,这不是经典 SQL 的一部分。有没有其他解决办法,或者我必须在这种情况下使用变量?

使用 MySQL @variables 的排名技术是一种解决该数据库中缺少 RANK()ROWNUM() window 函数的方法。

MySQL MariaDB 10.2, has RANK() and related functions 最近发布的分支。 MySQL 来自 Oracle,还没有。

您不是唯一希望 MySQL 不需要 @variables 进行此类查询的人。