【SQL第5回】集計関数:SUM・AVG・COUNT

SQL基礎講座 全10回(第5回)

【SQL第5回】集計関数:SUM・AVG・COUNT

レコードの羅列を表示するのではなく、テーブル全体の「合計」「平均」「件数」などを1つの結果にまとめて集計する便利な「集計関数」の使い方を学びます。

📌 SQL講座ロードマップ一覧(クリックで移動)

1. 代表的な5つの集計関数(Aggregate Function)

データベースから売上の合計額を計算したり、登録ユーザーの平均年齢を出したりする場合、プログラム側でレコードをすべて取り出して足し算ループを回すのは非常に効率が悪いです。

そのため、RDBMSに集計処理自体を任せて結果の1行だけを転送してもらうのがプロの鉄則です。これに使用する組み込みの関数を**「集計関数」**と呼びます。

  • SUM(カラム名): 指定列の「合計値」を算出する
  • AVG(カラム名): 指定列の「平均値」を算出する(Average)
  • COUNT(カラム名): 指定列の「データ件数(レコード数)」を数える
  • MAX(カラム名): 指定列の「最大値」を取得する
  • MIN(カラム名): 指定列の「最小値」を取得する

2. 全レコード数を数える COUNT(*)

「登録されている全ユーザー数」のように、特定のカラムではなく、テーブル全体の行数を純粋にカウントしたい時は、アスタリスクを用いて `COUNT(*)` と記述します。

`COUNT(email)` のようにカラム名を指定すると、そのカラムの中身が空(`NULL`:ヌル)のレコードは自動的にカウント対象から除外されて数えられますが、`COUNT(*)` は空の列がある行も含めて全てのレコード数を確実に数えます。

3. 集計関数を使う時は「AS」で別名を付けよう

`SELECT SUM(price) FROM orders;` とクエリを実行すると、出力されるヘッダー名が `SUM(price)` という不自然な関数のまま表示されてしまいます。

実務では、集計結果を格納するカラムには必ず第2回で学んだ **`AS`** エイリアスをセットで指定し、`SUM(price) AS 総売上金額` のように分かりやすい名称を上書き割り当てして返させるのが開発者のルールです。

4. 合計額とデータ件数を算出するSQLクエリ

以下のクエリは、注文テーブルから売上合計金額を算出し、かつ会員数テーブルから有効な全体のレコード数を集計するコード例です。

aggregates.sql
-- 1. 全売上の合計と平均を算出
SELECT
    SUM(amount) AS 総売上額,
    AVG(amount) AS 平均客単価
FROM
    orders;

-- 2. 全ユーザー数(レコード総数)を数える
SELECT
    COUNT(*) AS 総会員数
FROM
    users;
✍️ 第5回 理解度チェック(問題)

SQLの集計関数において、特定の数値カラムの「平均値」を自動計算して出力する関数の略称名(アルファベット3文字)は何でしょうか?

※この問題の解答と解説は、ページ最下部(まとめの前)に掲載しています。

5. まとめと次回予告

第5回の講義はお疲れ様でした!今回の重要ポイントを振り返りましょう。

  • `SUM`, `AVG`, `COUNT`, `MAX`, `MIN` などの集計関数でテーブル全体を集約処理できる。
  • `COUNT(*)` は、NULL(空データ)がある行も含め、全体のレコード数を確実にカウントする。
  • 関数適用後のヘッダー表示を美しく見せるため、必ず `AS 別名` を併用する。

次回(第6回)は、テーブル全体の集計ではなく、「店舗ごと」「性別ごと」のようにデータをグループに分けて集計する必須の拡張構文「GROUP BY句とHAVINGによる絞り込み」について学びます。お楽しみに!

🔑 第5回 理解度チェックの解答と解説

【解説】

正解は **`AVG`** です。 `SELECT AVG(score) FROM tests;` のように記述することで、指定した列の全ての有効なデータ値の「平均」を自動計算します。平均を求める英語「Average(アベレージ)」の先頭3文字の略称名となります。