之前要查询排序且有排名,如果是oracle的话有rank() over()函数,但是mysql没有这样的函数,只能自己试着用变量实现
表结构:
SELECT id,
score ,
@rank := @rank + 1 AS rank
FROM a, (SELECT @rank := 0) tmp
ORDER BY score desc ;
不过这样有一个问题如果同时有两个99分rank也会顺序的排序
我想到的临时解决办法就是内层进行一次group by,仅算出分数的排名,再用分数与a表匹配
sql代码:
SELECT a.id,a.score,b.rank from a,(
SELECT a.score ,
@rank := @rank + 1 AS rank
FROM (SELECT score from a GROUP BY score) a, (SELECT @rank := 0) tmp
ORDER BY score desc
) b
where a.score = b.score
ORDER BY b.rank;
不知道有没有更好的解决办法,如果不正确希望指点