如何通过查询获得用户在SQLite3中的排名/位置?

时间:2018-02-26 09:20:57

标签: python-3.x sqlite

我想知道所有用户的用户排名是什么。让我们说这是表:

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

Cat拥有最多的硬币,因此她将排名第一,Nick将排名第三。如何通过查询获得她的排名?

1 个答案:

答案 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