1
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

必要な結果を得るには、クエリをどのように編集すればよいですか?

4

1 に答える 1

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
于 2016-05-23T04:26:40.440 に答える