0

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

例如,我有一个表“分数”,其中有一列“值”

value 
50 
150 
10 
200 
180

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

php 中用来确定特定值的“等级”的语句是什么样的?

4

3 回答 3

1

如果您不关心关系,我会这样做:

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

在SQL Fiddle上查看它的实际效果。

于 2013-04-03T20:02:39.337 回答
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
对于性能问题,你可以运行一个测试,看看它是否能满足你的要求吧。

于 2013-04-03T20:12:06.243 回答
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 小提琴演示

这反映在其他 RDBMS 中RANK()ROW_NUMBER()

于 2013-04-03T20:20:35.530 回答