人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLでソート後の順位を取得する方法を教えて下さい。
例えば、以下のようなテーブルがあったとすると、
ーーーーーーーーーー
NAME , SCORE
ーーーーーーーーーー
aaaa , 90
bbbb , 36
cccc , 120
dddd , 100
eeee , 80
ffff , 47

ーーーーーーーーーー
SCOREの昇順で並び替えた時の「NAME='cccc'」の順位を求める、といった感じです。
よろしくお願いします。


●質問者: dy7
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●100ポイント ベストアンサー

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

(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つのどちらでも使えるようになっておいたほうが良いでしょう。


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

dy7さんのコメント
(2)のSQLで希望通りの結果を得ることが出来ました。 ありがとうございました!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ