如何使用dense_rank()实现真实排名

How to use dense_rank() to achieve real ranking

select 
    DENSE_RANK() over (order by score desc) as Rank , 
    username , 
    score 
from users 

我尝试了上面的查询,结果如下:

Rank    Username    score
-----   --------    -----
1       A           3500
1       B           3500
2       C           3000
2       D           3000
2       E           3000
3       F           2000

而我要求的结果是:

Rank    Username    score
-----   --------    -----
1       A           3500
1       B           3500
3       C           3000
3       D           3000
3       E           3000
6       F           2000

我应该如何编辑我的查询以获得我需要的结果?

使用Rank() instead of Dense_Rank()会解决你的问题。

SELECT 
    RANK() OVER (ORDER BY Score DESC) AS [Rank], 
    Username, 
    Score 
FROM Users

使用给定示例数据的工作执行:

DECLARE @Users TABLE (Username VARCHAR (2), Score INT)

INSERT INTO @Users (Username, Score)
VALUES
('A', 3500),
('B', 3500),
('C', 3000),
('D', 3000),
('E', 3000),
('F', 2000)

SELECT 
    RANK() OVER (ORDER BY Score DESC) AS [Rank], 
    Username, 
    Score 
FROM @Users

所以输出将是:

Rank UserName   Score
---- --------  ------
1       A       3500
1       B       3500
3       C       3000
3       D       3000
3       E       3000
6       F       2000