6

ユーザーIDとスコアを持つmySqlにテーブルがあります。

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

これまでのところ、次のようになります。

SELECT * FROM table_score
ORDER BY Score DESC

どこにあるかを調べるにはどうすればよいですかuserID = '1234'(つまり、エントリ 10/12)

4

2 に答える 2

11

UserRank次のクエリは、ユーザーのランクを指定する新しい列を提供します。

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

SQL フィドルのデモ

これにより、次のような結果が得られます。

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

次に、このクエリをサブクエリ内に配置し、 でフィルタリングして、userIdそのユーザー ランクを取得できます。何かのようなもの:

SELECT
  t.UserRank
FROM
(
   SELECT *, (@rownum := @rownum + 1) UserRank 
   FROM table_score, (SELECT @rownum := 0) t 
   ORDER BY Score DESC
) t
WHERE userID = '1234';

SQL フィドルのデモ

于 2013-01-14T00:57:20.967 に答える
2

特定のユーザー ID について、単純なクエリでこれを行うことができます。

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 にインデックスがある場合、これは非常に効率的です。

于 2013-01-14T01:25:12.773 に答える