• ブログ
  • >
  • [SQLの基本]ピボット入門: ピボットテーブルの作成方法

SQLのピボット入門:ピボットテーブルの作成方法

投稿日:

はじめに

データベース操作において、データの行を列に変換することはよくあります。これをピボット操作と呼びます。ピボット操作を使用することで、データの集計や分析がより直感的に行えるようになります。今回は、SQLでピボットテーブルを作成する方法について解説します。

ピボット操作の概要

ピボット操作は、データの特定の列の値を列ヘッダーとして使用し、他の列の値をこれらの新しい列に配置することです。これにより、クロス集計やデータの要約が容易になります。

以下のような売上データを持つテーブルsalesがあるとします。

salesperson
month
sales
AliceJan100
AliceFeb150
BobJan200
BobFeb250

このデータをピボット操作で次のように変換したいとします。

salesperson
Jan
Feb
Alice100150
Bob200250

MySQLでのピボット操作

MySQLでは、ピボット操作を実現するために条件付き集計関数を使用します。

SELECT 
  salesperson,
  SUM(CASE WHEN month = 'Jan' THEN sales ELSE 0 END) AS Jan,
  SUM(CASE WHEN month = 'Feb' THEN sales ELSE 0 END) AS Feb
FROM sales
GROUP BY salesperson;

このクエリは、salesテーブルのデータをピボットし、各営業担当者の月別売上を列に変換して表示します。

MySQLでの動的ピボット

動的ピボットは、ピボットする列の数が固定されていない場合に有用です。例えば、月の数が固定されていない場合などです。

MySQLでの動的ピボットは、準備されたステートメントを使用して実行できます。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(CASE WHEN month = ''',
      month,
      ''' THEN sales ELSE 0 END) AS ',
      month
    )
  ) INTO @sql
FROM sales;

SET @sql = CONCAT('SELECT salesperson, ', @sql, ' FROM sales GROUP BY salesperson');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

このクエリは、salesテーブルのデータを動的にピボットし、各営業担当者の月別売上を列に変換して表示します。

ピボットのポイント

ピボット操作を行う際のポイントをまとめます。

CASE WHEN + SUMの組み合わせがピボットの基本パターンです。SUMの代わりにCOUNT、MAX、AVGなど他の集合関数も使用できます。

列の値が事前に分かっている場合は静的ピボットが簡単です。列の値が動的に変わる場合は、準備されたステートメント(PREPARE/EXECUTE)を使用します。

Excelのピボットテーブルと同じ結果をSQLで実現できるため、大量データの集計に便利です。

まとめ

今回は、SQLでのピボット操作について学びました。CASE WHEN + 集合関数の組み合わせでピボットテーブルを作成する方法と、動的ピボットの手法を押さえておけば、データのクロス集計に対応できます。

SheetFlow - 学んだSQLを業務で活かそう

SQLマーケティングアカデミーで身につけたSQLスキル、実務でも使ってみませんか?

SheetFlowは、ExcelファイルをアップロードしてSQLで直接操作できるクラウドサービスです。学んだSELECT文やJOIN、集計関数をそのまま業務データに適用し、手作業の集計を自動化できます。

SheetFlowを無料で試す