Mysql 获取用户在分数表中的排名
我有一个简单的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,因为他获得了第三高分 查询应返回一行,其中包含(仅)所需的
**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