所有数据库都支持的排名方式
想法:把要取排名的表先排序好,然后单独作为一个表和select (@rowNum :=0)放在from后面。用(@rowNum:=@rowNum+1) as rankNum 来计算对应的行,以达到获取排名的目的。
比如下面的:获取每个人的总成绩的排名
SELECT a.* ,
(@rowNum:=@rowNum+1) as rankNum
from
(SELECT sid ,sum(score) as totalGradeRank
from sc
GROUP BY sid
ORDER BY totalGradeRank DESC
) as a,
(select (@rowNum :=0) ) as b
只能和要排序的表对等才能排序,不能参与查询等等。
单独形成一张表排过序的表,然后用于其它排名等操作最好
高版本数据库才支持的排名写法:rank over
//dense_rank() over(order by 根据哪个字段排名 排序规则) //相当于会取排好序的行号,只是同值的行号一样
select id,number,dense_rank() over(order by number desc) t_rank from passing_number
//t_rank相同之后根据id进行升序排列。
select id,number,dense_rank() over(order by number desc) t_rank
from passing_number order by t_rank asc , id asc //实际就把前面查询的结果单独再拿出来排序