カテゴリ: PostgreSQL 更新日: 2026/01/19

PostgreSQLのGROUP BY完全入門!初心者でもわかる複数列での集計方法

PostgreSQLで複数列のGROUP BYを行う方法
PostgreSQLで複数列のGROUP BYを行う方法

先生と生徒の会話形式で理解しよう

生徒

「データベースって聞くと難しそうです。GROUP BYって何をするものなんですか?」

先生

「紙の名簿を想像してください。同じクラスごとに人数を数えたり、同じ名字ごとにまとめたりしますよね。GROUP BYは、それと同じように、データを同じ条件ごとにまとめる命令です。」

生徒

「複数列っていうのは、どういう意味ですか?」

先生

「例えば『クラス』と『性別』の両方が同じ人をひとまとめにすることです。条件を二つ以上使って仕分けするイメージですね。」

1. PostgreSQLとGROUP BYの基本

1. PostgreSQLとGROUP BYの基本
1. PostgreSQLとGROUP BYの基本

PostgreSQL(ポストグレスキューエル)は、データベースを管理するためのソフトです。データベースとは、たくさんの情報を表の形で整理して保存する箱のようなものです。表は、エクセルの表や紙の名簿を思い浮かべると分かりやすいです。

GROUP BYは、その表の中のデータを「同じ値ごと」にまとめるためのSQL文です。例えば、年齢が同じ人ごとに人数を数えたり、部署ごとに給料の合計を出したりできます。

2. サンプルテーブルを見てみよう

2. サンプルテーブルを見てみよう
2. サンプルテーブルを見てみよう

まずは、実際に使う表の中身を確認します。これは「orders(注文)」という表で、誰がどの商品をどのカテゴリで買ったかを表しています。


id | customer | category | price
---+----------+----------+------
1  | 山田     | 本       | 1200
2  | 佐藤     | 本       | 1500
3  | 山田     | 文房具   | 300
4  | 鈴木     | 本       | 2000
5  | 佐藤     | 文房具   | 500
6  | 山田     | 本       | 800

3. 1つの列でGROUP BYする方法

3. 1つの列でGROUP BYする方法
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するとはどういうこと?

4. 複数列でGROUP BYするとはどういうこと?
4. 複数列でGROUP BYするとはどういうこと?

複数列のGROUP BYは、「条件を二つ以上使ってまとめる」ことです。紙の名簿で言うと、「クラス」と「出席番号」の両方が同じ人をセットにするような考え方です。

今回は「customer(お客さん)」と「category(カテゴリ)」の両方が同じデータをひとまとめにします。

5. PostgreSQLで複数列のGROUP BYを実行してみよう

5. PostgreSQLで複数列のGROUP BYを実行してみよう
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. 集約関数と一緒に使う理由

6. 集約関数と一緒に使う理由
6. 集約関数と一緒に使う理由

SUMのように、複数の数値を一つにまとめる関数を「集約関数」と呼びます。他にも、数を数えるCOUNT、平均を出すAVGなどがあります。GROUP BYは、これらの集約関数と一緒に使うことで力を発揮します。


SELECT customer, COUNT(*)
FROM orders
GROUP BY customer;

customer | count
---------+-------
山田     | 3
佐藤     | 2
鈴木     | 1

7. 複数列GROUP BYでよくある注意点

7. 複数列GROUP BYでよくある注意点
7. 複数列GROUP BYでよくある注意点

GROUP BYを使うときは、SELECTに書いた列は、必ずGROUP BYにも書く必要があります。これは「まとめ方が分からなくなるのを防ぐためのルール」です。

また、列の順番は結果には大きく影響しませんが、読みやすさのためにSELECTと同じ順番で書くのがおすすめです。

8. 日常生活で考えるGROUP BYのイメージ

8. 日常生活で考えるGROUP BYのイメージ
8. 日常生活で考えるGROUP BYのイメージ

複数列のGROUP BYは、買い物のレシートを「人ごと」かつ「お店ごと」に分けて合計金額を出す作業に似ています。一つの条件だけでなく、二つ三つの条件を組み合わせることで、より細かくデータを整理できます。

PostgreSQLのGROUP BYを理解すると、データの中身が一気に見やすくなり、集計や分析がとても楽になります。

カテゴリの一覧へ
新着記事
New1
PostgreSQL
PostgreSQLのLIMIT・OFFSETとパフォーマンス問題を完全解説|初心者でもわかる安全な使い方
New2
MySQL
MySQLのUPDATE文でデータを更新する基本を徹底解説|SQL初心者でもわかるデータベース更新入門
New3
PostgreSQL
PostgreSQLのOFFSET完全入門|並び替えと組み合わせてデータをスキップする方法を初心者向けに解説
New4
MySQL
MySQLで複数行INSERTを行う方法と注意点を徹底解説|SQL基礎から学ぶデータベース入門
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのDISTINCT完全ガイド|SQLで重複データを除外する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLのLEFT JOIN完全入門!不足データを補いながらテーブル結合する仕組みをやさしく解説
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLスキーマ設計のベストプラクティス完全ガイド|初心者でもわかるデータベース整理術
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLのpublicスキーマの役割と扱い方
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎