选择排序结果集中的行数的有效方法(MySQL)

时间:2017-01-23 03:30:50

标签: mysql

MySQL表如下所示:

Item  Score
-----------
A     3.646
B     2.775
C     6.383
D     0.122
...

Score上有一个索引。我想按降序的顺序选择项目,并且我还想知道项目的等级(即结果集中该特定行的数量)。在此示例中,所需的结果将是:

Item  Rank
----------
C     1
A     2
B     3
D     4

有没有一种有效的方法在大桌面上执行此操作?如果可能的话,我想避免使用子选项。

PS:是的,结果集中的排名当然总是1,2,3 ......但是不,我不能在应用程序中得到这个,因为这些结果将在DB中进一步处理而不是返回申请表。

2 个答案:

答案 0 :(得分:2)

SET @rank=0;
SELECT Item, @rank:=@rank+1 AS rank
FROM yourTable
ORDER BY Score DESC;

此选项使用会话变量来模拟行号功能,因为MySQL不支持分析功能。

这是一个link to a helpful tutorial,它讨论了更深入地模拟MySQL中的行号。

答案 1 :(得分:2)

单一陈述答案是:

select
    item,
    @rank := @rank + 1 rank
from (
    SELECT *
    FROM yourTable
    ORDER BY Score DESC
) t cross join (select @rank:=0) t2

没有子查询:

SELECT Item, @rank := if(@rank is null, 1, @rank+1) AS rank
FROM yourTable
ORDER BY Score DESC;