如何使用行绑定在MySQL中执行分组排名?

时间:2015-11-20 13:55:54

标签: mysql

ID_STUDENT | ID_CLASS |等级| RANK

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

我应该如何对数据进行排序和排名以获得上述结果?提前致谢

1 个答案:

答案 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()之间的差异感兴趣。