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中进一步处理而不是返回申请表。
答案 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;