mySQL排名与下一个更高的数字

时间:2014-04-21 17:19:27

标签: mysql

排名与领带正常工作,除了第一条记录总是丢失,无论它是如何获取的。试图将从低到高排名。

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 排名从高到低做同样的事情。

1 个答案:

答案 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