我在 mySql 中有一个表,其中包含用户 ID 和分数。
我想做的是按分数组织表格(简单),然后找到某个用户 ID 在表格中的位置。
到目前为止,我会:
SELECT * FROM table_score
ORDER BY Score DESC
我如何找到在哪里userID = '1234'
(即第 10 条,共 12 条)
以下查询将为您提供一个新列UserRank
,它指定用户等级:
SELECT
UserID,
Score,
(@rownum := @rownum + 1) UserRank
FROM table_score, (SELECT @rownum := 0) t
ORDER BY Score DESC;
这会给你类似的东西:
| 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';
对于给定的用户 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 的索引,这将非常有效。