カテゴリ: PostgreSQL 更新日: 2026/03/14

PostgreSQLのSUM・AVG完全解説|集約関数とGROUP BYの計算時の注意点を初心者向けにやさしく説明

PostgreSQLのSUM/AVGの計算時の注意点
PostgreSQLのSUM/AVGの計算時の注意点

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

生徒

「PostgreSQLでSUMとかAVGって聞いたんですが、何をするものなんですか?」

先生

「SUMは合計、AVGは平均を計算するための命令です。たとえば家計簿で、今月の出費の合計や、1日あたりの平均支出を出すようなイメージですね。」

生徒

「計算するだけなら簡単そうですが、注意点があるんですか?」

先生

「あります。数字じゃないデータが混ざっていたり、何も入っていない値があると、思った結果にならないことがあるんです。そこを一つずつ説明していきます。」

1. PostgreSQLのSUMとAVGとは何か

1. PostgreSQLのSUMとAVGとは何か
1. PostgreSQLのSUMとAVGとは何か

PostgreSQLのSUMとAVGは、集約関数(しゅうやくかんすう)と呼ばれる種類のSQLです。集約関数とは、たくさんのデータを一つにまとめて計算するための命令です。

SUMは「合計」を出します。AVGは「平均」を出します。電卓で足し算や割り算をする代わりに、データベースが自動で計算してくれると考えると分かりやすいです。

2. サンプルテーブルで考えてみよう

2. サンプルテーブルで考えてみよう
2. サンプルテーブルで考えてみよう

まずは、売上を管理するテーブルを例に考えてみます。数字は売上金額を表しています。


id | name       | price
---+------------+-------
1  | りんご     | 100
2  | みかん     | 80
3  | バナナ     | 120
4  | ぶどう     | 200

このような表がデータベースに保存されているとします。紙の表を想像しながら読み進めてください。

3. SUMで合計を計算するときの基本

3. SUMで合計を計算するときの基本
3. SUMで合計を計算するときの基本

SUMを使うと、price列の合計金額を一気に計算できます。


SELECT SUM(price)
FROM items;

sum
-----
500

100円、80円、120円、200円をすべて足して、500円という結果になります。人が計算するとミスしがちですが、SQLなら一瞬です。

4. AVGで平均を出すときの注意点

4. AVGで平均を出すときの注意点
4. AVGで平均を出すときの注意点

AVGは平均を計算しますが、ここで一つ注意があります。平均は「合計 ÷ 件数」で計算されます。


SELECT AVG(price)
FROM items;

avg
-----
125

合計500円を4件で割って、125円になります。ここまではとても分かりやすいですね。

5. NULLがある場合のSUMとAVGの動き

5. NULLがある場合のSUMとAVGの動き
5. NULLがある場合のSUMとAVGの動き

データベースには、まだ値が入っていない状態を表すNULL(ヌル)という特別な値があります。空白とは違い、「何も決まっていない」という意味です。


id | name       | price
---+------------+-------
1  | りんご     | 100
2  | みかん     | NULL
3  | バナナ     | 120
4  | ぶどう     | 200

この場合でもSUMとAVGを実行してみます。


SELECT SUM(price), AVG(price)
FROM items;

sum | avg
----+-----
420 | 140

NULLは計算から自動的に除外されます。みかんの価格は無視され、3件で計算される点が重要です。

6. 数字以外の列を使うとエラーになる理由

6. 数字以外の列を使うとエラーになる理由
6. 数字以外の列を使うとエラーになる理由

SUMやAVGは数字を計算する命令です。文字が入った列に対して使うと、計算できずにエラーになります。


SELECT SUM(name)
FROM items;

これは、文字を足し算できないのと同じです。家計簿で「りんご+みかん」と書いても金額にならないのと同じだと覚えてください。

7. GROUP BYと一緒に使うときの注意点

7. GROUP BYと一緒に使うときの注意点
7. GROUP BYと一緒に使うときの注意点

GROUP BYは、データをグループごとに分けて計算するための命令です。カテゴリ別の合計などを出すときに使います。


id | category | price
---+----------+-------
1  | 果物     | 100
2  | 果物     | 80
3  | 野菜     | 150
4  | 野菜     | 200

SELECT category, SUM(price)
FROM items
GROUP BY category;

category | sum
---------+-----
果物     | 180
野菜     | 350

GROUP BYを使う場合、SELECTに書ける列にはルールがあります。計算しない列は、必ずGROUP BYに書く必要があります。

8. 小数点と整数のAVGに注意しよう

8. 小数点と整数のAVGに注意しよう
8. 小数点と整数のAVGに注意しよう

AVGの結果は小数になることがあります。PostgreSQLでは、列の型によって結果が変わることがあります。


SELECT AVG(age)
FROM users;

年齢のように整数でも、平均は小数になる可能性があります。小数が出るのは間違いではなく、正しい計算結果です。

9. SUMとAVGを安全に使うための考え方

9. SUMとAVGを安全に使うための考え方
9. SUMとAVGを安全に使うための考え方

SUMやAVGを使うときは、「どんなデータが入っているか」を必ず意識することが大切です。NULLがあるか、数字だけか、グループ分けが必要かを事前に確認しましょう。

これは、料理を作る前に材料を確認するのと同じです。中身を知らずに計算すると、思った結果にならない原因になります。

カテゴリの一覧へ
新着記事
New1
PostgreSQL
PostgreSQLのMAX・MIN完全解説|集約関数とGROUP BYで最大値・最小値を抽出する方法
New2
MySQL
MySQLのORDER BYで文字列を並び替える方法と注意点を徹底解説|SQL初心者向け完全ガイド
New3
PostgreSQL
PostgreSQLのSUM・AVG完全解説|集約関数とGROUP BYの計算時の注意点を初心者向けにやさしく説明
New4
MySQL
MySQLのWHERE句でBETWEENを使う方法を徹底解説!SQL初心者でもわかる範囲検索の基本
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLでスキーマを分割するメリット
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLのpublicスキーマの役割と扱い方
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLのORDER BYの基本(昇順・降順)
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLでよく使うデータ型一覧(文字列・数値・日付)