ウィンドウ関数 レッスン3
NTILE
行をN等分するNTILE関数でデータをグループに分割する方法を学びます。
NTILEとは
NTILE(n)は、 ウィンドウ内の行をn個のバケット(グループ)に均等に分割し、各行にバケット番号(1〜n)を付与します。 四分位数(4分割)やデシル分析(10分割)など、パーセンタイル系の分析でよく使われます。 行数がnで割り切れない場合、先頭のバケットが1行多くなります。
NTILE(4)— 四分位数(Q1/Q2/Q3/Q4)NTILE(10)— デシル分析(上位10%など)- バケット番号は1から始まる整数
例1: 成績を四分位数に分割
テーブル定義
CREATE TABLE students ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, score INTEGER NOT NULL ); INSERT INTO students VALUES (1, '田中太郎', 95); INSERT INTO students VALUES (2, '鈴木花子', 88); INSERT INTO students VALUES (3, '佐藤一郎', 82); INSERT INTO students VALUES (4, '山田二郎', 79); INSERT INTO students VALUES (5, '伊藤花代', 73); INSERT INTO students VALUES (6, '渡辺次郎', 68); INSERT INTO students VALUES (7, '加藤三郎', 61); INSERT INTO students VALUES (8, '中村四郎', 55);
SQLエディタ
例2: 売上上位・下位の分析
テーブル定義
CREATE TABLE product_sales ( id INTEGER PRIMARY KEY, product TEXT NOT NULL, sales INTEGER NOT NULL ); INSERT INTO product_sales VALUES (1, '商品A', 500000); INSERT INTO product_sales VALUES (2, '商品B', 420000); INSERT INTO product_sales VALUES (3, '商品C', 380000); INSERT INTO product_sales VALUES (4, '商品D', 310000); INSERT INTO product_sales VALUES (5, '商品E', 260000); INSERT INTO product_sales VALUES (6, '商品F', 150000);
SQLエディタ
例3: グループ別NTILE
テーブル定義
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, '鈴木花子', '営業部', 450000); INSERT INTO employees VALUES (3, '佐藤一郎', '営業部', 380000); INSERT INTO employees VALUES (4, '山田二郎', '開発部', 520000); INSERT INTO employees VALUES (5, '伊藤花代', '開発部', 480000); INSERT INTO employees VALUES (6, '渡辺次郎', '開発部', 500000);
SQLエディタ