MySQL实现排名
一、排名 新MySQL8.0推出RANK排名函数,完全支持排名这种需求,但是必须MySQL8.0 以上版本才支持这个特性
那么8.0以下的版本有什么方法实现呢? 方法:使用用户变量,记录名次
用户自定义变量:以"@“开始,形式为”@name",以区分用户变量及列名。它可以是任何随机的,复合的标量表达式,只要其中没有列指定 例如: 使用用户变量
select @a:=1 m,@b:=@a+1 n;
执行结果:mn12
符号 " := " 是赋值的意思,与Java、Python等编程语言赋值有点区别
二、实例 给输入的记录按某种顺序计数
自定义变量【@】row初始值为0,并每次+1后赋值给自己; 例1:给学生信息表中的记录定名次
SELECT (@row:=@row+1) 名次,NO,NAME FROM stu a,(SELECT @row:=0) b;
-----@row的初始值为0
例2:按出生日期定名次
SELECT (@row:=@row+1) 名次,NO,NAME,bir
FROM stu a,(SELECT @row:=0) b
ORDER BY bir DESC;
例3:按身高从低到高排序排序
SELECT (@row:=@row+1) 排序号,NO,NAME,height
FROM stu a,(SELECT @row:=0) b
ORDER BY height;
例4:按成绩定名次,如果成绩相同,再按学号排序
SELECT NO,cno,result,(@row:=@row+1) 名次
FROM grade a,(SELECT @row:=0) b
ORDER BY result DESC,NO;
SELECT SUM(@row:=@row+1) a FROM (SELECT * FROM stu LIMIT 10) a,(SELECT)