在我的收入网站上,我的一些用户想知道他们对今天的收入有何“排名”。如果他们今天的收入排在第二位,他们将排在第二位。根据订单选择的“以上”Mysql计数行
我能想到在Mysql中做到这一点的唯一方法是Select user FROM stats WHERE date=today ORDER BY earnings
,然后遍历结果直到找到所需的用户。
这似乎是一个很简单的操作很多工作。有一个更好的方法吗?
编辑:他们也想知道他们需要赚多少钱才能晋升排名。
编辑2:上述系统的另一个问题是每个有0美元收入的人都是不同的等级,理想情况下我希望他们与同一等级并列。
编辑3:也许如果我可以根据收入的ORDER分配一个自动增量ID的某种视图,那么你的ID也是你的等级。我也可以用ID-1轻松地引用用户上方的人。这可能吗?
Edit4:感谢richardthekiwi,我都拿出了真正的查询兴趣的人:
SELECT
count(*)+1 MyRanking,
IFNULL((SELECT earnings from today_stats rankUp WHERE rankUp.earnings > my.earnings ORDER BY rankUp.earnings LIMIT 1)-my.earnings,0) AS rankdiff,
my.earnings
FROM today_stats my
left join today_stats others on others.earnings > my.earnings
WHERE my.user_id=18132
您可以使用'coalesce(min(others.earnings) - min(my.earnings),0)作为rankdiff而不是子查询(合并将第一个等级的null更改为0),并且如果您希望所有关系都相同排名使用'count(distinct others.earnings)+ 1'而不是你的数量。 – piotrm 2013-04-26 05:02:17