领带案例中的MySQL排名

时间:2011-08-17 21:53:54

标签: mysql select rank

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

球员|要点

  • 玛丽:90
  • Bob:90
  • 吉姆:65
  • 凯文:12

鲍勃和玛丽都应该排名第一。吉姆应该是#3。凯文应该是#4。

MySQL:

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

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

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

2 个答案:

答案 0 :(得分: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上,您可以使用window functions RANK()来实现这一目标,这样做会更好。我不知道MySQL的那种。

答案 1 :(得分:2)

假设名称是唯一的

SELECT t1.name, (SELECT COUNT(*) FROM table_1 t2 WHERE t2.score > t1.score) +1
AS rnk
FROM table_1 t1