2013-01-14 15 views
6

私はユーザーIDとスコアを持つmySqlのテーブルを持っています。テーブル内のSQLの位置を確認

私がしたいことは、スコア(単純)で表を整理することですが、特定のユーザーIDがテーブル内のどこにあるのかを見つけることです。

これまでのところ、私が持っているでしょう:

SELECT * FROM table_score 
ORDER BY Score DESC 

userID = '1234'(すなわち12のエントリ10)ここで、私が見つけるだろうどのように

+0

次の投稿をチェックしてください:http://stackoverflow.com/questions/3126972/mysql-row-number – Andy

答えて

10

次のクエリは、あなたのユーザーを指定する新しい列UserRankを与えますランク:

SELECT 
    UserID, 
    Score, 
    (@rownum := @rownum + 1) UserRank 
FROM table_score, (SELECT @rownum := 0) t 
ORDER BY Score DESC; 

SQL Fiddle Demo

そして、あなたは、サブクエリ内でこのクエリを入れて、そのユーザのランクを取得するために userIdでフィルタリングすることができ

| USERID | SCORE | USERRANK | 
----------------------------- 
|  4 | 100 |  1 | 
|  10 | 70 |  2 | 
|  2 | 55 |  3 | 
| 1234 | 50 |  4 | 
|  1 | 36 |  5 | 
|  20 | 33 |  6 | 
|  8 | 25 |  7 | 

:0

これは、あなたのような何かを与えるだろう。ような何か:

与えられたユーザーIDの ​​

SQL Fiddle Demo

+0

重複するUSERIDのレコードがある場合このクエリを編集するにはどうすればよいですか?感謝! –

2

、あなたは単純なクエリでこれを行うことができます。

select sum(case when ts.score >= thescore.score then 1 else 0 end) as NumAbove, 
     count(*) as Total 
from table_score ts cross join 
    (select ts.score from table_score ts where userId = '1234') thescore 

あなたはスコアとユーザーIDのインデックスを持っている場合、これは非常になります効率的。

関連する問題