🗃️SQLLearn
ウィンドウ関数 レッスン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エディタ