MySQLでソート後の順位を取得する方法を教えて下さい。

例えば、以下のようなテーブルがあったとすると、
ーーーーーーーーーー
NAME , SCORE
ーーーーーーーーーー
aaaa , 90
bbbb , 36
cccc , 120
dddd , 100
eeee , 80
ffff , 47
  …
ーーーーーーーーーー
SCOREの昇順で並び替えた時の「NAME='cccc'」の順位を求める、といった感じです。
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2012/05/04 23:57:44
  • 終了:2012/05/06 00:12:26

ベストアンサー

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492012/05/05 00:34:07

ポイント100pt

求め方はいくつかあります。

(1)対象範囲の全ての結果が欲しい場合は例えば下記のような具合にします。

SET @a = 0;
SELECT *, (@a := @a + 1) AS `順位` FROM `テーブル` ORDER BY SCORE DESC;

結果

NAMESCORE順位
cccc1201
dddd1002
aaaa903
eeee804
ffff475
bbbb366

(2)部分的な結果だけが欲しい場合は例えば下記のような具合にします。

SELECT *, (SELECT COUNT(*) + 1 FROM `テーブル` b WHERE b.SCORE > a.SCORE) AS `順位` FROM `テーブル` a WHERE `NAME` = 'cccc';

結果

NAMESCORE順位
cccc1201

他にも求め方はいろいろありますが、変数を使うもの(1)と、
自己結合を使うもの(2)がベースとなりますので、
上記2つのどちらでも使えるようになっておいたほうが良いでしょう。

id:dy7

早速の回答ありがとうございました。
今回は特定の1レコードの順位を取得したいので、(2)の方法になりそうです。
教えていただいたSQLで試してみます。ありがとうございました。

2012/05/05 01:41:49
id:dy7

(2)のSQLで希望通りの結果を得ることが出来ました。
ありがとうございました!

2012/05/06 00:12:49

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません