找出SQL数据库中值的“排名”

时间:2013-04-03 19:58:36

标签: php mysql sql performance select

具有最高性能的最简单方法是,确定包含>的MySQL数据库中Integer值的“等级”。 100.000个条目。

例如,我有一个表“得分”,列“值”

value 
50 
150 
10 
200 
180

在这种情况下,150的等级将是3,等级200将是1,等级10将是5,依此类推......

声明在php中用什么来确定特定值的“等级”?

3 个答案:

答案 0 :(得分:1)

如果你不关心领带,我会这样做:

SELECT COUNT(*)+1 AS rank FROM scores WHERE value > $myScore

SQL Fiddle上查看此操作。

答案 1 :(得分:0)


select Value, RankNumber
from (
    select Value, @RankNumber:= @RankNumber +1 as RankNumber
    from table1, (select @RankNumber:=0) t
    order by Value desc
  ) A
where A.Value = 180

<强> DEMO
出于性能考虑,您可以运行测试,看看它是否符合您的标准。

答案 2 :(得分:0)

因为我不知道你是否想要行号或排名(包括关系),所以这里有两个使用user-defined变量的选项:

SELECT * 
FROM (
    SELECT value, 
      @rn:=@rn+1 RowNumber,
      @rank:=if((@value=value),@rank, @rn) rank,
      @value:=value
    FROM scores
      JOIN (SELECT @value:=-1, @rn:=0, @rank:=0) t
    ORDER BY value DESC
   ) t
WHERE value = 150

SQL Fiddle Demo

这镜像其他RDBMS中的RANK()ROW_NUMBER()