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

inno
2014-09-17 16:57 2843 0
MS-SQL / SQL Server
順位付け関数「ROW_NUMBER」について

SQL SERVER 2005から使える順位付け関数「ROW_NUMBER」!
良く使われる関数ですので、良く覚えておきましょう~~

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

--#### テーブル作成
CREATE TABLE dbo.TempData
(
Company tinyint
,UserName nvarchar(10)
,Score int
)

--#### テストデータ作成
INSERT INTO dbo.TempData (Company, UserName, Score)
SELECT 1, N'鈴木', 85 UNION ALL
SELECT 1, N'前田', 70 UNION ALL
SELECT 1, N'竹村', 90 UNION ALL
SELECT 2, N'林', 60 UNION ALL
SELECT 2, N'伊藤', 80 UNION ALL
SELECT 2, N'尾山', 75 UNION ALL
SELECT 3, N'樋口', 80 UNION ALL
SELECT 3, N'落合', 15 UNION ALL
SELECT 3, N'黒木', 99

では、「Score」列のデータを元に高い順で順位付けをつけてみましょう。

SELECT ROW_NUMBER() OVER (ORDER BY Score DESC) AS No
, Company, UserName, Score 
FROM dbo.TempData

上記のように「ROW_NUMBER() OVER (ORDER BY Score DESC)」を記述します。

実行結果




では、Company別グループ化してScoreが高い順で順位をつけたい時は下記のように記述します。

SELECT ROW_NUMBER() OVER (PARTITION BY Company ORDER BY Score DESC) AS No
, Company, UserName, Score 
FROM dbo.TempData

PARTITION BY Companyを追記するのです。
PARTITION BY」句を利用すると、グループ化して順位を取得することができます。

実行結果



このようにすごく便利な関数ですが、多いデータを順位をつけるとサーバーに負荷がかかりますので、注意が必要です。

コメント