6

我在 mySql 中有一个表,其中包含用户 ID 和分数。

我想做的是按分数组织表格(简单),然后找到某个用户 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 |

然后,您可以将此查询放在子查询中并使用 a 进行过滤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

如果你有关于 score 和 userid 的索引,这将非常有效。

于 2013-01-14T01:25:12.773 回答