我想知道所有用户中排名最高的用户。假设这是表格:

UserName | Coins
---------------
Matthew  |  18
Nick     |  12
Cat      |  33


猫的硬币最多,因此她将排名第一,尼克将排名第三。如何通过查询获得她的排名?

最佳答案

这里的一种选择是使用相关子查询来找到密集等级。

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

10-08 14:23