とある投票システムで、登録者毎の順位取得を行う必要があったので作業をしました。
アルゴリズムというか、考え方では有るのですがメモ書きとして残しておきます。
とはいえ方法は案外簡単で、自己結合を行い「自分より上位の行数+1」をすることで順位は取得できます。
SELECT (SELECT COUNT(*)
FROM ex_table AS b
WHERE a.vote < b.vote) + 1 AS rank
FROM ex_table AS a
WHERE id = xxx
ORDER BY a.vote DESC;
例としてはこんな感じ。
ex_tableには、id列とvote列があるものとします。
この例ではid = xxx
のものを取得しています。