之前要查询排序且有排名,如果是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;
不知道有没有更好的解决办法,如果不正确希望指点
本文探讨了在MySQL中实现类似Oracle的排名功能的方法。由于MySQL缺乏内置的排名函数,文章提出了一种使用变量来模拟排名的解决方案,并针对相同得分的情况提供了一个改进方案。
176

被折叠的 条评论
为什么被折叠?



