IT技術関連SQL

SQL#8 ウィンドウ関数を使ったデータ分析

SQL

はじめに

こんにちは、シルです。
SQLの学習にあたり、学んだことメモしておきます。
学習にお役立てください。

参考までに…
SQLコマンド集:基本から応用

前回までの内容です
SQL#1 環境準備と基本操作
SQL#2 テーブルとデータベースの管理
SQL#3 ユーザー管理と権限の設定
SQL#4 サーバーステータスとインデックス管理
SQL#5 データベースのサイズ管理と構造確認
SQL#6 基本的なデータ操作
SQL#7 データ検索と削除の拡張

学習の概要

本記事では、ウィンドウ関数を使ったデータ分析手法を学びます。
ウィンドウ関数は、特定の範囲や条件でデータをグループ化し、前後の値を参照しながら集計や順位付けを行う際に役立ちます。
これにより、より詳細で高度なデータ分析が可能となります。

含まれる操作

SQL操作は以下の通り

1. ROW_NUMBER() – 順位付け

2. RANK() – 順位付け(同順位あり)

3. LEAD() – 次の行の値を取得

4. LAG() – 前の行の値を取得

5. NTILE() – グループ分け

実践

1. ROW_NUMBER() – 順位付け

売上データを降順に並べ、各レコードに一意の順位を付与します。

SELECT EmployeeID, SaleAmount,
ROW_NUMBER() OVER (ORDER BY SaleAmount DESC) AS RowNum
FROM Sales;

2. RANK() – 順位付け(同順位あり)

同じ売上金額の場合は同順位にし、それ以降の順位をスキップします。

SELECT EmployeeID, SaleAmount,
RANK() OVER (ORDER BY SaleAmount DESC) AS Ranking
FROM Sales;

3. LEAD() – 次の行の値を取得

各行に対して、次の行の売上金額を表示します。

SELECT EmployeeID, SaleAmount,
LEAD(SaleAmount, 1) OVER (ORDER BY SaleAmount DESC) AS NextSale
FROM Sales;

4. LAG() – 前の行の値を取得

各行に対して、前の行の売上金額を表示します。

SELECT EmployeeID, SaleAmount,
LAG(SaleAmount, 1) OVER (ORDER BY SaleAmount DESC) AS PreviousSale
FROM Sales;

5. NTILE() – グループ分け

売上金額を一定数のグループに分割します。

SELECT EmployeeID, SaleAmount,
NTILE(4) OVER (ORDER BY SaleAmount DESC) AS Quartile
FROM Sales;

テストデータの準備

まず、売上データを格納する「Sales」テーブルを作成し、サンプルデータを挿入します。
このテーブルを基にして、ウィンドウ関数の実践を進めます。

CREATE TABLE Sales (
    SaleID INT PRIMARY KEY AUTO_INCREMENT,
    EmployeeID INT,
    SaleAmount DECIMAL(10, 2),
    SaleDate DATE
);

-- サンプルデータの挿入
INSERT INTO Sales (EmployeeID, SaleAmount, SaleDate)
VALUES
(1, 5000.00, '2024-01-15'),
(2, 3000.00, '2024-01-20'),
(3, 4000.00, '2024-02-05'),
(4, 4500.00, '2024-02-10'),
(1, 3500.00, '2024-02-15'),
(2, 2500.00, '2024-02-20'),
(3, 6000.00, '2024-03-01'),
(4, 7000.00, '2024-03-05');

課題

1. ROW_NUMBER()
 各従業員の売上金額に対して、一意の順位を付けてください。

2. RANK()
 同じ売上金額の従業員に対して、同順位を付けてください。

3. LEAD()
 各従業員の売上金額に対して、次の売上を表示してください。

4. LAG()
 各従業員の売上金額に対して、前の売上を表示してください。

5. NTILE()
 売上金額を基に、4つのグループに分けてください(第1四分位~第4四分位)。

まとめ

この記事では、ウィンドウ関数を用いてデータ分析の高度なテクニックを学びました。
ROW_NUMBER()やRANK()で順位を付けたり、LEAD()やLAG()で前後の値を参照したり、NTILE()でデータをグループ分けすることで、データをより細かく分析できるようになります。
これらの手法は、特にビジネスレポートやデータのトレンド分析で活用されます。
次回は、さらに高度な集計と結合クエリを使ったデータ分析に挑戦します。

コメント

タイトルとURLをコピーしました