Как использовать dens_rank() для достижения реального рейтинга
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
Как мне отредактировать мой запрос, чтобы получить требуемый результат?
1 ответ
Решение
Использование Rank()
вместо 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