ROW_NUMBER
SQL Serverの「ROW_NUMBER」は、SELECTした結果に連番・順位を振ります。「ROW_NUMBER」の使い方を解説します。
ROW_NUMBERの使い方
ROW_NUMBER() OVER(ORDER BY {並びかえる列} ASC/DESC)
{並びかえる列}を昇順・降順に並び替え、連番(順位)をふる
ROW_NUMBER() OVER(PARTITION BY {グループ化する列} ORDER BY {並びかえる列} ASC/DESC)
{並びかえる列}を昇順・降順に並び替え、グループごとに連番(順位)をふる
サンプルデータ
empテーブル
empno | empname | address | age | region |
D001 | 佐藤花子 | 東京都渋谷区1-1-1 | 25 | tokyo |
D002 | 山田太郎 | 北海道札幌市1-2-15 | 42 | hokkaido |
D003 | 中村玉子 | 埼玉県さいたま市1-1-1000 | 25 | tokyo |
D004 | 伊藤学 | 東京都渋谷区100-1-1 | 30 | tokyo |
例1. ROW_NUMBERで連番をふるパターン
--ROW_NUMBERで連番つきでデータを取得する SELECT empno,empname, ROW_NUMBER() OVER(ORDER BY region,empno ASC) num FROM emp;
empno | empname | num |
D001 | 佐藤花子 | 1 |
D003 | 中村玉子 | 2 |
D004 | 伊藤学 | 3 |
D002 | 山田太郎 | 4 |
ここでは「ROW_NUMBER」を使って「region,empno」の昇順に並び替えて行ナンバーをふりました。
例2. ROW_NUMBERでグループ毎に連番をふるパターン
--ROW_NUMBERで連番つきでデータを取得する SELECT empno,empname, ROW_NUMBER() OVER(PARTITION BY region ORDER BY region,empno ASC) num FROM emp;
empno | empname | num |
D001 | 佐藤花子 | 1 |
D003 | 中村玉子 | 2 |
D004 | 伊藤学 | 3 |
D002 | 山田太郎 | 1 |
ここではまず「PARTITION BY region 」でグループ化します。「region」毎にグループ化した中で、「ROW_NUMBER」を使って「region,empno」の昇順に並び替えて行ナンバーをふりました。
ROW_NUMBERとRANKの違い
SQL Serverには、連番をふる関数として他にも「RANK」があります。
「RANK」との違いは、同じ順位に同じ番号をふるのが「RANK」ですが、同じ順位でも違う番号をふるのが「ROW_NUMBER」です。
参照:ROW_NUMBER (Transact-SQL) – Microsoft Docs
以上、SQL Serverの「ROW_NUMBER」で連番・順位をふりました。
コメント