I think you want to find a rating for asll user_id`s`:
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;
If you do not want to reorder the output, try the following:
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;
Omesh source share