アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

順位付けを行うクエリ

例えば以下のテーブル「user」について。

name value
alex 6
brigid 3
cath 9
darlton 6
elenore 4

これをvalueの高い順に並び替え、順位を付けたいとします。

rank name value
1 cath 9
2 alex 6
2 darlton 6
4 elenore 4
5 brigid 3

以下のようなクエリで実装できます。

SELECT
  ( SELECT COUNT(*)
    FROM   `user` AS `tmp_user`
    WHERE  `tmp_user`.`value` > `user`.`value`
  ) + 1 AS `rank`
 ,`user`.`name`
 ,`user`.`value`
FROM
  `user`
ORDER BY
  `rank` ASC

順位部分は「そのレコードのvalueより高いvalueをもつレコード数を求め、+1する」というロジックです。
もちろん昇順のランキングであれば不等号を逆にすればOK。