PARTITION BY基準
CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 59/72。
OVER ()句のもう1つの選択肢はPARTITION BYです
これにより、各グループの行に個別に番号を付けることができます
例:
| id | type |
| 132 | t1 |
| 52 | t2 |
| 92 | t1 |
| 154 | t3 |
| 198 | t1 |
SELECT id, type, ROW_NUMBER() OVER (PARTITION BY type ORDER BY id) as row_num
FROM table1これにより、各タイプ内でそれぞれに番号を付ける列が生成されます:
| id | type | row_num |
| 132 | t1 | 1 |
| 52 | t2 | 1 |
| 92 | t1 | 1 |
| 154 | t3 | 1 |
| 198 | t1 | 3 |
id 92 は、type t1 における最小の id であるため、row_num 1 です。
注: ROW_NUMBER() では、各パーティション内で行に番号を付ける方法を決定するために、OVER() 内に ORDER BY 句が必要です。
PARTITION BY の中に複数の列を指定することもできます。
ROW_NUMBER() OVER (PARTITION BY type, hue ORDER BY id)チャレンジ
簡単利用可能なテーブルと列:
doors:id、publication_yeardoors_specs:id、country、color
ある工場でドアを製造しています。publication_yearが2000より小さいドアについて、countryとcolorの組み合わせごとに番号を付ける必要があります。この列にrow_numという名前を付けてください。
各グループ内では、idの昇順でドアに番号を付けます。仕様のないドアは無視してください。最終結果はidの昇順で並べ替えてください。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
11ウィンドウ関数 パート1
ROW_NUMBER関数ORDER BY基準PARTITION BY基準PARTITIONとORDERLEADとLAG関数復習 - LEADとLAG復習 - 図復習 - ボックス自分で練習してみよう: SQLプレイグラウンド