ROW_NUMBER関数
CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 57/72。
window functionsは、現在のrowに関連する一連のテーブル行に対して計算を実行します。通常の集約関数とは異なり、window functionsは結果を単一の行にまとめません。
特に次のようなことが必要な場合に便利です:
- 累計を計算する
- グループ内で項目を順位付けする
- 現在の行を前後の行と比較する
- 期間ごとの傾向を分析する
たとえば、window functionsの使用例に関する現実世界の例をいくつか紹介します。
- 売上分析
- 各年(1995年、1997年、1999年)までの累積売上を計算する
- 各四半期の売上上位商品を見つける
- スポーツ統計
- 異なる年におけるオリンピックのメダル数を追跡する
- 各大会期間(2000、2004、2008)で首位のアスリートを特定する
ROW_NUMBER() は最もシンプルなウィンドウ関数の 1 つです。結果セット内の各行に、一意の連番を割り当てます。使用方法は次のとおりです。
SELECT column1, column2,
ROW_NUMBER() OVER ([PARTITION BY column] [ORDER BY column]) as row_num
FROM table_name;ROW_NUMBER() では OVER 句を使用することが必須です:ROW_NUMBER() OVER ()
例:
SELECT product_name, sale_date,
ROW_NUMBER() OVER () as row_num
FROM sales;これにより、1 から行の総数まで数える row_num 列が追加されます。
注: OVER 句には、番号付けの仕組みを制御するための並べ替えとパーティション分割の指示を含めることができます。
チャレンジ
簡単利用可能なテーブルと列:
liquids:id、density
密度が 5.677 を超えるすべての liquids を取得します。
結果に番号を付け(ROW_NUMBER() 関数を使用)、この列を row_num と呼びます。
自分で試してみよう
-- ウィンドウ関数を使用して、フィルタリングされた結果の各行に番号を付ける
SELECT id, density, ____ as row_num
FROM liquids
WHERE density > ____このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
11ウィンドウ関数 パート1
ROW_NUMBER関数ORDER BY基準PARTITION BY基準PARTITIONとORDERLEADとLAG関数復習 - LEADとLAG復習 - 図復習 - ボックス自分で練習してみよう: SQLプレイグラウンド