在MySQL中排名时,我需要一些处理关系的帮助。例如:
球员|要点
鲍勃和玛丽都应该排名第一。吉姆应该是#3。凯文应该是#4。
MySQL:
SET @rank=0;
SELECT @rank:=@rank +1 as rank, player, points FROM my_table
如何更改SELECT语句,以便在绑定的情况下排名正确?
我的现实生活中的问题比较复杂,但如果我理解如何解决上述问题,那么我应该设置。
答案 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