在我使用MySQL的过程中,我在很多机会中遇到了一个任务,即每组找到最佳(最大/最小)行。
例如表:
成绩(Student_ID,Course_ID,成绩)
要找到每个学生的最高课程,我们可以使用相关子查询:
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的一部分。有没有其他解决方案,或者在这种情况下我必须使用变量?
答案 0 :(得分:1)
使用MySQL @variables
的排名技术是一种解决该数据库缺少RANK()
或ROWNUM()
窗口函数的方法。
最近发布的MySQL MariaDB 10.2, has RANK()
and related functions分支。来自Oracle的MySQL,还没有。
你并不是唯一一个希望MySQL不需要@variables
来进行此类查询的人。