この記事では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・・・