PostgreSQLのGROUP BYの基本的な書き方
生徒
「人数を数えることはできたんですが、年齢ごとに人数を分けて数えることもできますか?」
先生
「できます。そのときに使うのがGROUP BYです。」
生徒
「グループって、まとめるってことですか?」
先生
「その通りです。同じ値ごとに分けて、集計するための書き方です。」
1. SQLとは何か?
SQLは、データベースという仕組みに保存されているデータを操作するための言語です。データベースは、表の形で情報を整理して保存する場所です。SQLを使うと、その表の中から必要な情報を取り出したり、数を数えたり、計算したりできます。PostgreSQLは、SQLを使って操作できる代表的なデータベースの一つです。
2. GROUP BYとは何をするものか?
GROUP BYは、データをグループごとにまとめるためのSQLの書き方です。紙の名簿を想像してください。年齢が同じ人ごとに線を引いて分け、その人数を数えるような作業があります。GROUP BYは、この「同じもの同士で分ける」作業をデータベースで行うための命令です。
3. サンプルテーブルを確認しよう
ここではusersテーブルを使って説明します。SQLを実行する前のテーブルは次のとおりです。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 25 | jiro@example.com
5 | 伊藤美咲 | 19 | misaki@example.com
6 | 小林健太 | 30 | kenta@example.com
4. GROUP BYの基本的な書き方
GROUP BYは、集約関数と一緒に使います。例えば、年齢ごとに人数を数えたい場合は、年齢でグループ分けして、COUNTで数えます。
SELECT age, COUNT(*)
FROM users
GROUP BY age;
age | count
----+------
19 | 2
25 | 2
30 | 2
この結果は、年齢が19歳の人が2人、25歳が2人、30歳が2人いることを示しています。名簿を年齢順に分けて、それぞれの人数を数えた結果と同じです。
5. GROUP BYで指定した列の意味
GROUP BYで指定した列は、「この列の値が同じものを一つのグループにする」という意味です。上の例ではageを指定しているので、年齢が同じ行同士がまとめられています。SELECTの中に書ける通常の列は、基本的にGROUP BYに書いた列だけになります。これは、どのグループの値なのかをはっきりさせるためです。
6. 複数の集約関数とGROUP BY
GROUP BYでは、COUNTだけでなく、他の集約関数も一緒に使えます。例えば、年齢ごとに人数と平均年齢を確認することもできます。
SELECT age, COUNT(*), AVG(age)
FROM users
GROUP BY age;
age | count | avg
----+-------+-----
19 | 2 | 19
25 | 2 | 25
30 | 2 | 30
このように、同じグループの中でまとめて計算ができます。AVGは平均を計算する集約関数です。
7. WHEREとGROUP BYの組み合わせ
GROUP BYを使う前に、条件でデータを絞りたい場合もあります。そのときはWHEREを先に書きます。例えば、20歳以上の人だけを年齢ごとに数える場合です。
SELECT age, COUNT(*)
FROM users
WHERE age >= 20
GROUP BY age;
age | count
----+------
25 | 2
30 | 2
WHEREで対象を選び、その後でGROUP BYでまとめる、という順番だと覚えると分かりやすいです。
8. GROUP BYを使うときの考え方
GROUP BYは、「同じ値ごとに分けて、まとめて計算する」ための仕組みです。紙の名簿を机に広げて、同じ条件の人を並べ直すイメージを持つと理解しやすくなります。PostgreSQLでは、このGROUP BYを使うことで、データを分析したり、傾向を知ったりすることができます。最初は一つの列でグループ化する練習から始めると、自然に使い方が身についていきます。