选择排序结果集中行数的有效方法(MySQL)
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 在大桌子上有没有有效的方法?如果可能的话,我希望避免子选择 附言:是的,结果集中的排名当
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