开发者社区> 问答> 正文

如何在MySQL中执行分组排名

所以我有一张桌子,如下所示:

ID_STUDENT | ID_CLASS | GRADE

1 | 1 | 90 1 | 2 | 80 2 | 1 | 99 3 | 1 | 80 4 | 1 | 70 5 | 2 | 78 6 | 2 | 90 6 | 3 | 50 7 | 3 | 90 然后,我需要对它们进行分组,排序和排序以给出:

ID_STUDENT | ID_CLASS | GRADE | RANK

2      |    1     |  99   |  1
1      |    1     |  90   |  2
3      |    1     |  80   |  3
4      |    1     |  70   |  4
6      |    2     |  90   |  1
1      |    2     |  80   |  2
5      |    2     |  78   |  3
7      |    3     |  90   |  1
6      |    3     |  50   |  2

现在,我知道您可以使用temp变量进行排名,例如此处,但是如何对分组集进行排名呢?感谢您的见解!

展开
收起
保持可爱mmm 2020-05-10 21:53:28 329 0
1 条回答
写回答
取消 提交回答
  • SELECT id_student, id_class, grade, @student:=CASE WHEN @class <> id_class THEN 0 ELSE @student+1 END AS rn, @class:=id_class AS clset FROM (SELECT @student:= -1) s, (SELECT @class:= -1) c, (SELECT * FROM mytable ORDER BY id_class, id_student ) t 这以非常简单的方式起作用:

    初始查询按id_class第一,id_student第二顺序排序。 @student并@class初始化为-1 @class用于测试是否输入下一组。如果的先前值id_class(存储在中@class)不等于当前值(存储在中id_class),则将@student其清零。否则增加。 @class分配了新值id_class,并将在下一行的第3步的测试中使用该值。来源:stack overflow

    2020-05-10 21:53:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像