SQL Tips

 

[SQL Server] 順位付け関数「RANK」、「DENSE_RANK」について

MS-SQL / SQL Server
順位付け関数「RANK」、「DENSE_RANK」について

SQL SERVER 2005から使える順位付け関数「RANK」、「DENSE_RANK」!
順位付け関数には「ROW_NUMBER」もありますが、少し差があります。

では、テストの為にテーブルを作成してテストデータを登録しましょう。

-- #### テストテーブル作成
CREATE TABLE dbo.TempData
(
UserName varchar(10)
,Score int
)

-- #### テストデータ登録
INSERT INTO dbo.TempData (UserName, Score) VALUES ('AA', 100)
INSERT INTO dbo.TempData (UserName, Score) VALUES ('BB', 80)
INSERT INTO dbo.TempData (UserName, Score) VALUES ('CC', 90)
INSERT INTO dbo.TempData (UserName, Score) VALUES ('DD', 70)
INSERT INTO dbo.TempData (UserName, Score) VALUES ('EE', 90)
INSERT INTO dbo.TempData (UserName, Score) VALUES ('FF', 70)
INSERT INTO dbo.TempData (UserName, Score) VALUES ('GG', 60)
INSERT INTO dbo.TempData (UserName, Score) VALUES ('HH', 90)

-- #### 順位付けデータ確認
SELECT 
 ROW_NUMBER() OVER (ORDER BY Score DESC) AS [Row_Number]
, RANK() OVER (ORDER BY Score DESC) AS [Rank]
, DENSE_RANK() OVER (ORDER BY Score DESC) AS [Dense_Rank]
, UserName, Score
FROM dbo.TempData

実行結果




では、実行結果を見ながら説明したいと思います。

Scoreが高い順に順位付けをした結果となります。


Row_Number」関数を使うと同じScoreでは別の順位が付けられました。

つまり、同値でも重複する順位を付けないのです。


Rank」関数は同値の場合、同じ順位で付けます。

Scoreが90のCC,EE,HHのユーザーを見ると全部2位だと付けられています。

その2位の3名については2,3,4位を持っていることになりますので

次の順位は3位ではなく5位から始まることになります。


Dense_Rank」関数はほぼ「Rank」関数と同じですが、

同値が存在する場合、次の順位に付けられるデータが違います。

Scoreが90のCC,EE,HHのユーザーを見ると「Rank」関数と同じく全部2位になっています。

次の順位は「Rank」関数では5位から始まりましたが、

Dense_Rank」の場合、3位から始まります。

この差があります。
このエントリーをはてなブックマークに追加
2014-10-15 15:57:27   2191

コメント

[SQL Server] 順位付け関数「RANK」、「DENSE_RANK」について

-.日付:2014-10-15   カテゴリ : -   閲覧数:2191

[SQL Server] DISTINCT - 重複行を除外してデータの取得方法

-.日付:2014-10-03   カテゴリ : -   閲覧数:2887

[SQL Server] DATETIME データ型のミリ秒に関する注意事項

-.日付:2014-10-01   カテゴリ : -   閲覧数:3110

[SQL Server] RAND(ランダム)関数で乱数を取得する方法

-.日付:2014-09-24   カテゴリ : -   閲覧数:11892

[SQL Server] 順位付け関数「ROW_NUMBER」について

-.日付:2014-09-17   カテゴリ : -   閲覧数:2563

[SQL Server] LIKEで「_」、「%」が入った文字を検索する方法

-.日付:2014-09-17   カテゴリ : -   閲覧数:3970

[SQL Server] SQL Server CPU 使用率が高いクエリを検索する方法

-.日付:2014-09-12   カテゴリ : -   閲覧数:7045

[SQL Server] 既存のテーブルにPrimary Key(PK)を設定する方法

-.日付:2014-08-20   カテゴリ : -   閲覧数:2029

[SQL Server] テーブルの一覧を取得する方法 - Table List

-.日付:2014-08-14   カテゴリ : -   閲覧数:2255

Copyright © 2015 INNOYA.COM All rights reserved. RSS