Menu
Coddy logo textTech

PARTITION BY criterion

CoddyのSQLジャーニー「基礎」セクションの一部 — レッスン 59/72。

OVER () 句のもう一つのオプションは PARTITION BY です

これにより、各グループごとに別々に行を番号付けできます 

例:

idtype
132t1
52t2
92t1
154t3
198t1
SELECT id, type, ROW_NUMBER() OVER (PARTITION BY type ORDER BY id) as row_num
FROM table1

これにより、各タイプ内でそのタイプの各行を番号付けする列が生成されます:

idtyperow_num
132t11
52t21
92t12
154t31
198t13

id 92 は row_num 2 を持っています。なぜなら id で並べ替えたときの type t1 の 2 番目の行だからです。

注意: ROW_NUMBER() は、各パーティション内で行がどのように番号付けされるかを決定するため、OVER() 内に ORDER BY 句を必要とします。

さらに、PARTITION BY 内に複数の列を指定することもできます:

ROW_NUMBER() OVER (PARTITION BY type, hue ORDER BY id)
challenge icon

チャレンジ

簡単

利用可能なテーブルと列:

  • <strong>doors</strong>: <strong>id</strong>, <strong>publication_year</strong>
  • <strong>doors_specs</strong>: <strong>id</strong>, <strong>country</strong>, <strong>color</strong>

工場がドアを製造しています。publication_year2000 未満の各 countrycolor の組み合わせのドアに番号を振る必要があります。この列を row_num と名付けてください。

各グループ内でドアをその id の昇順で番号付けしてください。仕様のないドアは無視してください。最終結果を id の昇順でソートしてください。 

チートシート

PARTITION BYOVER() 句内で使用して、グループ内の行を番号付けします:

SELECT id, type, ROW_NUMBER() OVER (PARTITION BY type) as row_num
FROM table1

複数の列でパーティション分けできます:

ROW_NUMBER() OVER (PARTITION BY type, hue)

自分で試してみよう

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン