Rank with Ties 正常工作,除了第一个记录总是丢失,无论它是如何获取的。试图对从低到高进行排名。
SELECT x.*,
COUNT(*) AS myRank
FROM myTablename x
JOIN myTablename y
ON x.number > y.number
GROUP BY id
ORDER BY myRank
很高兴地说,经过长时间的努力,以下修订按预期工作!
SELECT x.*,
Count(y.id)+1 AS myRank
FROM myTablename x
LEFT JOIN myTablename y
ON (x.number > y.number)
GROUP BY x.id
ORDER BY myRank
结果:
ID # Rank
A -50 1
B -40 2
C -40 2
D -30 4
E -30 4
将“=”添加到...ON x.number >= y.number ...获得并列排名,除了并列记录排名到下一个更高的数字。
ID # Rank
A -50 1
B -40 3
C -40 3
D -30 5
E -30 5
Ranking High-to-low with ON x.number <= y.number 做同样的事情。
最佳答案
这是一个没有自连接但使用变量的版本。它很可能也更快:
select id, points, rank from (
select
t.*,
@rownum := @rownum + 1,
@rank := if(@prev_points = points, @rank, @rownum) as rank,
@prev_points := points
from
test t,
(select @rank:=0, @rownum:=0, @prev_points) var_init
order by points desc
)sq
- 看到它在 sqlfiddle 中实时运行
关于mySQL 将关系排序为下一个更高的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23202239/