MySQL实现Oracle里的 rank()over(ORDER BY) 功能
由于MySQL没有Oracle里一样的rank()over()函数,所以我们只能使用SQL语句利用变量来实现这个功能。在此非常感谢 http://hudingchen.iteye.com/ 他的帮助。
例如我有一张表 表名为 A:
ID SCORE
1 28
2 33
3 33
4 89
5 99
6 68
7 68
8 78
9 88
10 90
现在我需要如下结果:
ID SCORE RANK
5 99 1
10 90 2
4 89 3
9 88 4
8 78 5
6 68 6
7 68 7
2 33 8
3 33 9
1 28 10
SELECT id,
score,
rank
FROM (SELECT tmp.id,
tmp.score,
@rank := @rank + 1 AS rank
FROM (SELECT id,
score
FROM a
ORDER BY score desc) tmp,
(SELECT @rank := 0) a) RESULT;
希望能够帮助更多的人 感谢您的来访!