Mysql 获取用户在分数表中的排名

Mysql 获取用户在分数表中的排名,mysql,sql,ranking,Mysql,Sql,Ranking,我有一个简单的MySQL表,在那里我保存了游戏的分数。看起来是这样的: **Id - UserId - Score** 问题是:如何获得用户排名?我有一个用户Id 一个例子 **Id - UserId - Score** 1 - AAAA - 150 2 - BBBB - 110 3 - BBBB - 120 4 - CCCC - 102 5 - AAAA - 130 在这种情况下,IdUser CCCC排名将为3,因为他获得了第三高分 查询应返回一行,其中包含(仅)所需的

我有一个简单的MySQL表,在那里我保存了游戏的分数。看起来是这样的:

**Id  -  UserId  -  Score**
问题是:如何获得用户排名?我有一个用户Id

一个例子

**Id - UserId - Score**

1 - AAAA - 150

2 - BBBB - 110

3 - BBBB - 120

4 - CCCC - 102

5 - AAAA - 130
在这种情况下,IdUser CCCC排名将为3,因为他获得了第三高分

查询应返回一行,其中包含(仅)所需的排名


谢谢

如果您有一个用户id,则希望返回得分相同或更高的用户数

select count(*) as `rank`
from table t join
     (select score from table t where userId = @USERID) var
     on t.score >= var.score;
如果你有重复的分数,你可能真的想要:

select 1 + count(*) as `rank`
from table t join
     (select score from table t where userId = @USERID) var
     on t.score > var.score;
现在还不清楚你想要复制用户做什么。我可以建议:

select 1 + count(*) as `rank`
from (select userId, max(score) as score
      from table t
      group by userId
     ) t join
     (select max(score) from table t where userId = @USERID) var
     on t.score > var.score;

如果您有一个用户id,则希望返回得分相同或更高的用户数

select count(*) as `rank`
from table t join
     (select score from table t where userId = @USERID) var
     on t.score >= var.score;
如果你有重复的分数,你可能真的想要:

select 1 + count(*) as `rank`
from table t join
     (select score from table t where userId = @USERID) var
     on t.score > var.score;
现在还不清楚你想要复制用户做什么。我可以建议:

select 1 + count(*) as `rank`
from (select userId, max(score) as score
      from table t
      group by userId
     ) t join
     (select max(score) from table t where userId = @USERID) var
     on t.score > var.score;

如果您有一个用户id,则希望返回得分相同或更高的用户数

select count(*) as `rank`
from table t join
     (select score from table t where userId = @USERID) var
     on t.score >= var.score;
如果你有重复的分数,你可能真的想要:

select 1 + count(*) as `rank`
from table t join
     (select score from table t where userId = @USERID) var
     on t.score > var.score;
现在还不清楚你想要复制用户做什么。我可以建议:

select 1 + count(*) as `rank`
from (select userId, max(score) as score
      from table t
      group by userId
     ) t join
     (select max(score) from table t where userId = @USERID) var
     on t.score > var.score;

如果您有一个用户id,则希望返回得分相同或更高的用户数

select count(*) as `rank`
from table t join
     (select score from table t where userId = @USERID) var
     on t.score >= var.score;
如果你有重复的分数,你可能真的想要:

select 1 + count(*) as `rank`
from table t join
     (select score from table t where userId = @USERID) var
     on t.score > var.score;
现在还不清楚你想要复制用户做什么。我可以建议:

select 1 + count(*) as `rank`
from (select userId, max(score) as score
      from table t
      group by userId
     ) t join
     (select max(score) from table t where userId = @USERID) var
     on t.score > var.score;

如果我有重复的UserId,比如示例,它就不起作用。对UserId CCCC的查询返回我排名第4而不是第3位,但它给了我一个错误“每个派生表都必须有自己的别名”,现在是另一个错误:(on子句中的未知列“t.score”我需要知道用户的位置排名,而不考虑所有可能的记录是否具有重复的UserId如果我有重复的UserId(如示例所示),则它不起作用。对UserId的查询CCCC返回我的排名位置4,而不是3,但它给了我错误“每个派生表都必须有自己的别名”现在又出现了另一个错误:(on子句中的未知列't.score'我需要知道用户的职位排名,而不考虑所有可能的记录是否有重复的UserId,如果我有重复的UserId,如示例中所示,则它不起作用。对UserId的查询CCCC返回我的职位排名4,而不是3,但它给了我错误“每个派生表都必须有自己的别名”现在是另一个错误:(on子句中的未知列“t.score”我需要知道用户的位置排名,而不考虑所有可能的记录是否有重复的UserId如果我有重复的UserId(如示例所示),则它不起作用。对UserId的查询CCCC返回我的排名位置4,而不是3,但它给了我错误“每个派生表都必须有自己的别名。”现在又出现了另一个错误:(on子句中的未知列't.score'我需要知道用户的职位排名,而不考虑所有可能的记录都有重复的UserId