日期:2014-05-16  浏览次数:20725 次

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;


希望能够帮助更多的人 感谢您的来访!