排名与领带正常工作,除了第一条记录总是丢失,无论它是如何获取的。试图将从低到高排名。
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
添加" =" to ... ON x.number> = y.number ...获得关系正确的排名,除了绑定的记录排名为下一个更高的数字。
ID # Rank
A -50 1
B -40 3
C -40 3
D -30 5
E -30 5
使用 ON x.number< = y.number 排名从高到低做同样的事情。
答案 0 :(得分:2)
这是一个没有自连接的版本,而是使用变量。它最有可能也更快:
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