7

私にはテーブルユーザーがいます:

id  |   rating
1       4
2       -1
3       12
4       0
5       2
6       0

評価によってユーザーの場所の順序を選択するにはどうすればよいid = Nですか?同様の評価を持つユーザーがトップの同じ場所にいますか?

UPD:出力したい:

If userid = 1、his rank is 2、if userid = 2、his rank is 5、if userid = 3、、rank is 1...しかし、ifuserid = 4または6theirのrank are 4理由は、レートが類似しているためです。

4

2 に答える 2

5

aslluser_idの`の評価を見つけたいと思います。

SELECT id,
       IF(rating <> @var_rating_prev, (@var_rank:= @var_rank + 1), @var_rank) AS rank,
       (@var_rating_prev := rating) AS rating
FROM table_name a,(SELECT @var_rank := 0, @var_rating_prev := 0) r
ORDER BY rating DESC;

@sqlfiddle

出力のレコードの順序を変更したくない場合は、次のことを試してください。

SELECT a.*, b.rank
FROM test_table a
     INNER JOIN (
            SELECT id,
                   IF(rating <> @var_rating_prev, (@var_rank:= @var_rank + 1), @var_rank) AS rank,
                   (@var_rating_prev := rating) AS rating
            FROM test_table a,(SELECT @var_rank := 0, @var_rating_prev := 0) r
            ORDER BY rating DESC
        ) b
         ON a.id = b.id
ORDER BY a.id;
于 2012-08-31T11:30:58.963 に答える
2
SELECT COUNT(*)+1 `rank`
FROM table_name
WHERE rating > (SELECT rating
                FROM table_name
                WHERE id = N)
于 2012-08-31T11:46:47.920 に答える