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

选择排序结果集中行数的有效方法(MySQL),mysql,Mysql,MySQL表如下所示: Item Score ----------- A 3.646 B 2.775 C 6.383 D 0.122 ... 在得分列上有一个索引。我想按分数递减的顺序选择项目,我还想知道项目的排名(即结果集中特定行的编号)。在本例中,预期结果为: Item Rank ---------- C 1 A 2 B 3 D 4 在大桌子上有没有有效的方法?如果可能的话,我希望避免子选择 附言:是的,结果集中的排名当

MySQL表如下所示:

Item  Score
-----------
A     3.646
B     2.775
C     6.383
D     0.122
...
得分
列上有一个索引。我想按分数递减的顺序选择项目,我还想知道项目的排名(即结果集中特定行的编号)。在本例中,预期结果为:

Item  Rank
----------
C     1
A     2
B     3
D     4
在大桌子上有没有有效的方法?如果可能的话,我希望避免子选择

附言:是的,结果集中的排名当然永远是1,2,3。。。但是不,我不能仅仅在应用程序中导出它,因为这些结果将在DB中进一步处理,而不会返回到应用程序

SET @rank=0;
SELECT Item, @rank:=@rank+1 AS rank
FROM yourTable
ORDER BY Score DESC;
此选项使用会话变量来模拟行号功能,因为MySQL不支持分析功能

下面是一个更深入地讨论在MySQL中模拟行数的示例

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


下面是一个更深入地讨论在MySQL中模拟行数的示例。

单语句的答案是:

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;

答案是:

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;

@sumit事实上,很多其他人:-)觉得很尴尬,如果真的那么简单:)我想的太复杂了。。。而且我不知道添加会发生在@sumit的
订单之后实际上,许多其他人:-)觉得很尴尬,如果它真的那么简单:)我想太复杂了。。。我不知道添加会发生在
orderby