# テスト用のテーブル作成
CREATE TABLE `ranking` ( `user_id` int(11) NOT NULL DEFAULT '0', `score` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
# テスト用のデータ作成
INSERT INTO ranking(user_id, score) VALUES (1,1213), (2,10233), (3,143023), (4,12013), (5,12510013), (6,12003), (7,120163), (8,103123), (9,103123);
# 順位付けのSELECT文
# サブクエリで、メインクエリのscore値より大きいレコード数+1 をランクとして抽出しています。
SELECT user_id, score, (SELECT COUNT(*) +1 FROM ranking SUB WHERE MAIN.score < SUB.score) AS rank FROM ranking MAIN ORDER BY rank, user_id ;
# 出力結果
+---------+----------+------+ | user_id | score | rank | +---------+----------+------+ | 5 | 12510013 | 1 | | 3 | 143023 | 2 | | 7 | 120163 | 3 | | 8 | 103123 | 4 | | 9 | 103123 | 4 | | 4 | 12013 | 6 | | 6 | 12003 | 7 | | 2 | 10233 | 8 | | 1 | 1213 | 9 | +---------+----------+------+
0 件のコメント:
コメントを投稿