私はユーザーIDとスコアを持つmySqlのテーブルを持っています。テーブル内のSQLの位置を確認
私がしたいことは、スコア(単純)で表を整理することですが、特定のユーザーIDがテーブル内のどこにあるのかを見つけることです。
これまでのところ、私が持っているでしょう:
SELECT * FROM table_score
ORDER BY Score DESC
userID = '1234'
(すなわち12のエントリ10)ここで、私が見つけるだろうどのように
私はユーザーIDとスコアを持つmySqlのテーブルを持っています。テーブル内のSQLの位置を確認
私がしたいことは、スコア(単純)で表を整理することですが、特定のユーザーIDがテーブル内のどこにあるのかを見つけることです。
これまでのところ、私が持っているでしょう:
SELECT * FROM table_score
ORDER BY Score DESC
userID = '1234'
(すなわち12のエントリ10)ここで、私が見つけるだろうどのように
次のクエリは、あなたのユーザーを指定する新しい列UserRank
を与えますランク:
SELECT
UserID,
Score,
(@rownum := @rownum + 1) UserRank
FROM table_score, (SELECT @rownum := 0) t
ORDER BY Score DESC;
そして、あなたは、サブクエリ内でこのクエリを入れて、そのユーザのランクを取得するために
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の 重複するUSERIDのレコードがある場合このクエリを編集するにはどうすればよいですか?感謝! –
、あなたは単純なクエリでこれを行うことができます。
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のインデックスを持っている場合、これは非常になります効率的。
次の投稿をチェックしてください:http://stackoverflow.com/questions/3126972/mysql-row-number – Andy