PostgreSQLのGROUP BY完全入門!初心者でもわかる複数列での集計方法
生徒
「データベースって聞くと難しそうです。GROUP BYって何をするものなんですか?」
先生
「紙の名簿を想像してください。同じクラスごとに人数を数えたり、同じ名字ごとにまとめたりしますよね。GROUP BYは、それと同じように、データを同じ条件ごとにまとめる命令です。」
生徒
「複数列っていうのは、どういう意味ですか?」
先生
「例えば『クラス』と『性別』の両方が同じ人をひとまとめにすることです。条件を二つ以上使って仕分けするイメージですね。」
1. PostgreSQLとGROUP BYの基本
PostgreSQL(ポストグレスキューエル)は、データベースを管理するためのソフトです。データベースとは、たくさんの情報を表の形で整理して保存する箱のようなものです。表は、エクセルの表や紙の名簿を思い浮かべると分かりやすいです。
GROUP BYは、その表の中のデータを「同じ値ごと」にまとめるためのSQL文です。例えば、年齢が同じ人ごとに人数を数えたり、部署ごとに給料の合計を出したりできます。
2. サンプルテーブルを見てみよう
まずは、実際に使う表の中身を確認します。これは「orders(注文)」という表で、誰がどの商品をどのカテゴリで買ったかを表しています。
id | customer | category | price
---+----------+----------+------
1 | 山田 | 本 | 1200
2 | 佐藤 | 本 | 1500
3 | 山田 | 文房具 | 300
4 | 鈴木 | 本 | 2000
5 | 佐藤 | 文房具 | 500
6 | 山田 | 本 | 800
3. 1つの列でGROUP BYする方法
最初に、1つの列だけでGROUP BYを使います。ここでは「category(カテゴリ)」ごとに、合計金額を計算します。
SELECT category, SUM(price)
FROM orders
GROUP BY category;
このSQLは、「同じカテゴリの商品をまとめて、その値段を全部足す」という意味です。
category | sum
---------+------
本 | 5500
文房具 | 800
4. 複数列でGROUP BYするとはどういうこと?
複数列のGROUP BYは、「条件を二つ以上使ってまとめる」ことです。紙の名簿で言うと、「クラス」と「出席番号」の両方が同じ人をセットにするような考え方です。
今回は「customer(お客さん)」と「category(カテゴリ)」の両方が同じデータをひとまとめにします。
5. PostgreSQLで複数列のGROUP BYを実行してみよう
実際のSQLを見てみます。customerとcategoryをカンマで並べて書くのがポイントです。
SELECT customer, category, SUM(price)
FROM orders
GROUP BY customer, category;
このSQLは、「同じお客さん」かつ「同じカテゴリ」の注文をまとめて、合計金額を計算します。
customer | category | sum
---------+----------+------
山田 | 本 | 2000
山田 | 文房具 | 300
佐藤 | 本 | 1500
佐藤 | 文房具 | 500
鈴木 | 本 | 2000
6. 集約関数と一緒に使う理由
SUMのように、複数の数値を一つにまとめる関数を「集約関数」と呼びます。他にも、数を数えるCOUNT、平均を出すAVGなどがあります。GROUP BYは、これらの集約関数と一緒に使うことで力を発揮します。
SELECT customer, COUNT(*)
FROM orders
GROUP BY customer;
customer | count
---------+-------
山田 | 3
佐藤 | 2
鈴木 | 1
7. 複数列GROUP BYでよくある注意点
GROUP BYを使うときは、SELECTに書いた列は、必ずGROUP BYにも書く必要があります。これは「まとめ方が分からなくなるのを防ぐためのルール」です。
また、列の順番は結果には大きく影響しませんが、読みやすさのためにSELECTと同じ順番で書くのがおすすめです。
8. 日常生活で考えるGROUP BYのイメージ
複数列のGROUP BYは、買い物のレシートを「人ごと」かつ「お店ごと」に分けて合計金額を出す作業に似ています。一つの条件だけでなく、二つ三つの条件を組み合わせることで、より細かくデータを整理できます。
PostgreSQLのGROUP BYを理解すると、データの中身が一気に見やすくなり、集計や分析がとても楽になります。