我有一个表用户:
id | rating
1 4
2 -1
3 12
4 0
5 2
6 0
Run Code Online (Sandbox Code Playgroud)
我如何通过评级来评估用户的位置排序在哪里id = N和具有相似评级的用户在顶部具有相同的位置?
UPD:我想输出:
如果userid = 1,他的rank is 2,如果userid = 2他的rank is 5,如果userid = 3,rank is 1...但如果userid = 4还是6他们的rank are 4,因为利率是相似的.
我想你想找到所有 user_id 的评级:
SELECT id,
IF(rating <> @var_rating_prev, (@var_rank:= @var_rank + 1), @var_rank) AS rank,
(@var_rating_prev := rating) AS rating
FROM table_name a,(SELECT @var_rank := 0, @var_rating_prev := 0) r
ORDER BY rating DESC;
Run Code Online (Sandbox Code Playgroud)
如果您不想更改输出中记录的顺序,请尝试以下操作:
SELECT a.*, b.rank
FROM test_table a
INNER JOIN (
SELECT id,
IF(rating <> @var_rating_prev, (@var_rank:= @var_rank + 1), @var_rank) AS rank,
(@var_rating_prev := rating) AS rating
FROM test_table a,(SELECT @var_rank := 0, @var_rating_prev := 0) r
ORDER BY rating DESC
) b
ON a.id = b.id
ORDER BY a.id;
Run Code Online (Sandbox Code Playgroud)