SQL SQL Server プログラミング

【 SQL Server 】SQL Server のよく使う順位付け関数について

この記事ではSQL Serverでよく使う順位付けを行うことのできる使い方について、
解説していきます!

他にも便利な関数があれば、別記事にて使用方法を解説していきたいと思います!

ROW_NUMBER 関数

ROW_NUMBER関数は、一時的にSQLの取得結果にシーケンス番号(ID)を振ることができる関数です。

構文は以下の通りです。

ROW_NUMBER () OVER ( [ PARTITION BY [パティションカラム1], [パティションカラム2], ...] 
              ORDER BY [ソートカラム1], [ソートカラム2], ...)


上記の構文の中で、パティションを設定した場合は各パティション内でORDER BYで指定した順序で1から順番にIDが振られていきます。
逆にパティションの設定がない場合はORDER BY で指定しておいて順番でIDが振られていきます。

RANK関数

RANK関数は、SQLの結果に順位を振ってくれる関数です。

構文は以下の通りです。

(関数名以外、ROW_NUMBER関数と全く一緒です)

RANK () OVER ( [PARTITION BY [パティションカラム1], [パティションカラム2], ...]
               ORDER BY [ソートカラム1], [ソートカラム2], ... )


ここでROW_NUMBER関数とRANK関数の違いは、

ROW_NUMBERは結果の各行に異なる番号を振っていきますが、

RANK関数はSQL文で指定したパティションおよびORDER BYのソートで値が同じ場合は同じ番号が振られるようになっています。
ただし、同じ番号が振られた場合、その次に振られる番号は同じ番号が振られた分だけスキップした番号となります。

例:RANK(番号) → 1、2、2、4、5・・・

ちなみに、DENSE_RANK関数を使用すればRANK関数と同じ構文のまま番号をスキップせずに番号が振られた結果を取得することができます。

例: DENSE_RANK(番号) → 1、2、2、2、3、4・・・

おすすめ記事はコチラ

ASP.NET Web Forms 1

この記事ではマイクロソフト社が開発・提供しているWebアプリケーション開発用フレームワーク「ASP.NET」の「Web Forms」を「MVC」と比較しながらメリットやデメリット等を含めて解説していき ...

C#VB 2

今回はC#(ver.7.0以降)、VB(ver. 15以降)でforeachループ内で繰り返し回数を参照する方法について解説していきます。 従来の記述方法とよりスマートに記述する方法の2通りを以下にな ...

3

この記事ではSQL Serverで使用できる「STUFF」という便利な関数の使い方について、解説していきます! 他にも便利な関数があれば、別記事にて使用方法を解説していきたいと思います! STUFF ...

4

今回はSQL ServerでデータをXML形式で取得する方法について書いていきます。 FOR XML PATH SQL Serverには「FOR XML PATH」という関数があって、SQL分の末尾に ...

-SQL, SQL Server, プログラミング
-, ,