この記事では、SQLにおける`GROUP BY`と`PIVOT`の組み合わせについて解説します。特に、何らかのデータ集合に対して、複数の属性を同時に集計する必要が出てきた場合に、これらのSQLの機能がどのように役立つのかを具体例と共に見ていきます。
目次
はじめに
データベース処理においては、よく集計処理が必要になります。SQLでは`GROUP BY`を用いて簡単に集計が可能です。また、`PIVOT`は行と列を逆転させる操作であり、これを`GROUP BY`と組み合わせることで、非常に多機能な集計処理が可能になります。
GROUP BYの基本
概念
`GROUP BY`句は、指定した列に基づいて行をグループ化し、それぞれのグループに対して集計関数を適用します。
SELECT department, COUNT(*) FROM employees
GROUP BY department;
具体例
department | employee |
---|---|
開発 | Taro |
開発 | Hanako |
営業 | Jiro |
営業 | Sachiko |
このテーブルに対して、以下のSQL文を実行します。
SELECT department, COUNT(*) FROM employees
GROUP BY department;
department | COUNT(*) |
---|---|
開発 | 2 |
営業 | 2 |
PIVOTの基本
概念
`PIVOT`は、行を列に変換するSQLの機能です。これにより、横方向にデータを展開できます。
具体例
department | month | sales |
---|---|---|
開発 | 1月 | 200 |
開発 | 2月 | 250 |
営業 | 1月 | 150 |
営業 | 2月 | 180 |
SELECT *
FROM monthly_sales
PIVOT (SUM(sales) FOR month IN ('1月', '2月'));
department | 1月 | 2月 |
---|---|---|
開発 | 200 | 250 |
営業 | 150 | 180 |
GROUP BYとPIVOTの組み合わせ
目的と使用ケース
GROUP BYとPIVOTを組み合わせることで、より高度な集計が可能です。特に、多角的な視点からデータを解析する際に有用です。
具体例
SELECT *
FROM (
SELECT department, month, sales FROM monthly_sales
)
PIVOT (
SUM(sales)
FOR month IN ('1月', '2月')
)
ORDER BY department;
department | 1月 | 2月 |
---|---|---|
開発 | 200 | 250 |
営業 | 150 | 180 |
まとめ
この記事では、SQLの`GROUP BY`と`PIVOT`を組み合わせた処理について詳しく解説しました。これらを理解し、適切に使用することで、多角的な視点からのデータ解析が容易になります。
created by Rinker
¥4,554
(2024/11/22 10:55:01時点 Amazon調べ-詳細)
コメント