0

在 MySQL 中排名时,我需要一些帮助来处理关系。例如:

播放器 | 积分

  • 玛丽:90
  • 鲍勃:90
  • 吉姆:65
  • 凯文:12

Bob 和 Mary 都应该排名第一。吉姆应该是#3。凯文应该是#4。

MySQL:

SET @rank=0;
SELECT @rank:=@rank +1 as rank, player, points FROM my_table

如何更改 SELECT 语句,以便在平局的情况下排名正确?

我现实生活中的问题比较复杂,但是如果我明白如何解决上述问题,那么我应该设置。

4

2 回答 2

2
SELECT players.*, COUNT(higher_ranking.id) + 1 AS rank
    FROM players
    LEFT JOIN players AS higher_ranking
        ON higher_ranking.points > players.points
    GROUP BY players.id

在 Postgres 上,您可以使用窗口函数RANK() 来实现这一点,这要好得多。我不知道 MySQL 有什么类似的东西。

于 2011-08-17T21:58:26.407 回答
2

假设名称是唯一的

SELECT t1.name, (SELECT COUNT(*) FROM table_1 t2 WHERE t2.score > t1.score) +1
AS rnk
FROM table_1 t1
于 2011-08-17T21:58:55.030 回答