mysql 确定已排序SQL表中条目的行号

utugiqy6  于 2023-02-15  发布在  Mysql
关注(0)|答案(1)|浏览(164)

假设我有一个存储学生信息的表
id | first_name | last_name | dob | score
其中score是对它们性能的一些非唯一的数值评估。(模式实际上并不相关,我试图尽可能地通用)
我想知道,对于任何给定的学生,他们基于score的总排名是多少,ROW_NUMBER()或任何等效的计数器方法实际上并不起作用,因为它们只考虑返回的条目,所以如果你只对一个特定的学生感兴趣,它总是1
计算分数大于当前分数的学生数也不起作用,因为您可以有多个分数相同的学生。按辅助字段(如dob)额外排序是否起作用,或者是否太慢?

gijlo24d

gijlo24d1#

您应该能够将JOIN转换为一个子查询,该子查询将提供整个人群中每个学生的排名:

SELECT student.*, ranking.rank
FROM student
JOIN (
    SELECT id, RANK() OVER (ORDER BY score DESC) as rank
    FROM student
) ranking ON student.id = ranking.id

我认为数据的规模将是决定这对于您的用例是否是一个现实的解决方案的关键因素。

相关问题