我想知道所有用户的用户排名是什么。让我们说这是表:
UserName | Coins
---------------
Matthew | 18
Nick | 12
Cat | 33
Cat拥有最多的硬币,因此她将排名第一,Nick将排名第三。如何通过查询获得她的排名?
答案 0 :(得分:2)
此处的一个选项是使用相关子查询来查找密集排名。
SELECT
t1.UserName,
t1.Coins,
t2.rank
FROM yourTable t1
INNER JOIN
(
SELECT
t1.Coins,
(SELECT COUNT(*) FROM (SELECT DISTINCT Coins FROM yourTable) t2
WHERE t2.Coins >= t1.Coins) rank
FROM (SELECT DISTINCT Coins FROM yourTable) t1
) t2
ON t1.Coins = t2.Coins;
上述查询尝试处理两个或多个用户具有相同硬币级别的边缘情况。它会按如下方式分配密集排名:
UserName | Coins | Rank
-----------------------
Cat | 33 | 1
Matthew | 18 | 2
Nick | 12 | 3
Michael | 12 | 3
Donald | 12 | 3
Jim | 10 | 4
Alf | 10 | 4