順位付けを行うクエリ
例えば以下のテーブル「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。