score毎にレコード付与を行いたい場合には以下SQLで対応可能

## ランキング付与(同率は未対応)
SET @rownum=0;

SELECT
  @rownum:=@rownum+1 AS ROW_NUM
  , score
  , userid
FROM
  ranking_tbl
ORDER BY
  score desc
;

同率順位があった場合は、mysql内のソート順に連番が増えていく為、正しい値にはならないが、処理が高速な為、

同率が少ない場合、同率が同じ順位にならなくても気にならない場合は推奨。

## ランキング付与(同率対応版)
SELECT
  r1.userid
  , r1.score
  , (
     SELECT
       count(r2.score)
     FROM
       ranking_tbl AS r2
     WHERE
       r2.score > r1.score
     ) + 1 AS rank
FROM
  ranking_tbl AS r1
ORDER BY
  r1.score DESC
;

同率順位があった場合は、同率で表す事が出来るが、テーブルのレコード量が多いと、

処理が重くなってくるので、同率未対応の処理とは要件によって取捨選択する形になるパターンが多いと思われます。

おすすめの記事