在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