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・・・

おすすめ記事はコチラ

スマレジ テックファーム 1

スマレジ テックファーム で Webエンジニアとして勤めている tomoです。 今回は株式会社スマレジや私が所属している 「 スマレジ テックファーム 」についてPRしていきたいと思います。 スマレジ ...

2

FromBody 属性を使用して、 ASP.NET Core(.NET 6)のWebAPIでBodyパラメータのJSONを受け取る方法を解説します。 FromBody 属性 POSTやGETで呼び出さ ...

PC picture 3

ASP.NET Core(.NET 6)でCookie認証のタイムアウトを設定する方法を解説します。 Cookieの有効期限について Cookieには通常はタイムアウト(有効期限)を設定します。 基本 ...

4

ASP.NET Core(.NET 6)でクロスオリジンリクエスト ( CORS )を設定する方法を解説します。 簡単に クロスオリジンリクエスト ( CORS )とは何かについても少し解説したいと思 ...

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