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
进行此类查询的人。
在我使用 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
进行此类查询的人。