mysql5.7 实现分组后组内排序功能 ROW_NUMBER() OVER (PARTITION BY)

在mysql8.0以上版本有ROW_NUMBER() OVER (PARTITION BY) 函数可以进行分组并进行组内排序,但是5.7以下版本是没有这个函数,我们这时候可以利用临时变量来实现这个效果。

1个分组依据

需求示例:现在需要统计学生的各科成绩排名,就需要安装subject科目进行分组,然后按分数倒序排序。
有一个学生表如下:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键Id',
  `name` varchar(5) NOT NULL COMMENT '学生姓名',
  `subject` varchar(6) DEFAULT NULL COMMENT '科目',
  `score` smallint(3) DEFAULT NULL COMMENT '分数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

表里面的数据如下:
id name subject score
1 张三 语文 77
2 李四 语文 67
3 王五 语文 85
4 张三 数学 82
5 李四 数学 67
6 王五 英语 85
7 王五 数学 85

SELECT a.NAME, a.score, a.SUBJECT, @last :=IF(@FIRST = a.SUBJECT, @last + 1, 1 ) AS rn, @FIRST := a.SUBJEC

猜你喜欢

转载自blog.csdn.net/web13618542420/article/details/126802806