ウィンドウ関数 レッスン1
ROW_NUMBER
結果セットの各行に連番を付与するROW_NUMBER関数を学びます。
ウィンドウ関数とROW_NUMBER
ウィンドウ関数は、集約関数と異なり行を集約せず、各行に対して計算結果を返します。ROW_NUMBER()は、OVER句で指定した順序に従って各行に1から始まる連番を付与します。 同点でも必ず異なる番号が付くのが特徴です。
ROW_NUMBER() OVER (ORDER BY col)— 順序指定で連番ROW_NUMBER() OVER (PARTITION BY grp ORDER BY col)— グループ別連番- 同順位でも必ず1,2,3...と連続する番号が付く
例1: 全体に連番を付ける
テーブル定義
CREATE TABLE students ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, score INTEGER NOT NULL ); INSERT INTO students VALUES (1, '田中太郎', 85); INSERT INTO students VALUES (2, '鈴木花子', 92); INSERT INTO students VALUES (3, '佐藤一郎', 78); INSERT INTO students VALUES (4, '山田二郎', 92); INSERT INTO students VALUES (5, '伊藤花代', 88);
例2: グループ別に連番を付ける
テーブル定義
CREATE TABLE employees ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, department TEXT NOT NULL, salary INTEGER NOT NULL ); INSERT INTO employees VALUES (1, '田中太郎', '営業部', 400000); INSERT INTO employees VALUES (2, '鈴木花子', '開発部', 520000); INSERT INTO employees VALUES (3, '佐藤一郎', '営業部', 450000); INSERT INTO employees VALUES (4, '山田二郎', '開発部', 480000); INSERT INTO employees VALUES (5, '伊藤花代', '人事部', 360000); INSERT INTO employees VALUES (6, '渡辺次郎', '開発部', 500000);
例3: ROW_NUMBERで重複排除(最新1件のみ取得)
テーブル定義
CREATE TABLE orders ( id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL, product TEXT NOT NULL, order_date TEXT NOT NULL ); INSERT INTO orders VALUES (1, 1, '商品A', '2024-01-10'); INSERT INTO orders VALUES (2, 1, '商品B', '2024-02-15'); INSERT INTO orders VALUES (3, 2, '商品C', '2024-01-20'); INSERT INTO orders VALUES (4, 2, '商品D', '2024-03-01'); INSERT INTO orders VALUES (5, 3, '商品A', '2024-02-28');