可以将你的表考虑成两个完全相同的表A与表B。
针对表A中的每一条成绩记录,找出表B中成绩更好的所有记录。如图所示。
成绩为70的同学因为其前面有3位成绩更优异的,所以排位第4
成绩为75的同学(共两位)因为其前面只有1位成绩更优异的,所以排位第2
成绩为80的同学因为其前面没有成绩更优异的,所以排位第1
你的SQL语句,正好得出如上的逻辑结果.
也可以用 left outer join 类似这样
select a.id, a.grade, count(b.grade) + 1 as Ranking
from A left join B on a.grade < b.grade
group by a.id, a.grade