2 | 1 | 90 | 1
1 | 1 | 90 | 1
3 | 1 | 90 | 1
4 | 1 | 70 | 4
6 | 2 | 90 | 1
1 | 2 | 80 | 2
5 | 2 | 78 | 3
7 | 3 | 90 | 1
6 | 3 | 50 | 2
我应该如何对数据进行排序和排名以获得上述结果?提前致谢
答案 0 :(得分:0)
一种方法是使用子查询:
select sc.*,
(select count(*) + 1
from studentclass sc2
where sc2.grade > sc.grade and sc2.id_class = sc.id_class
) as rank
from studentclass sc order by id_class, grade;
在ANSI SQL(以及大多数其他数据库)中,这由rank()
函数提供。您可能对rank()
,dense_rank()
和row_number()
之间的差异感兴趣。