カテゴリ: データベース 更新日: 2026/03/31

SQL集計関数・JOINを完全攻略!COUNT・SUM・AVGの使い方を初心者向けに徹底解説

COUNT・SUM・AVGなど集計関数の使い方を丁寧に解説
COUNT・SUM・AVGなど集計関数の使い方を丁寧に解説

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

生徒

「SQLってよく聞くんですけど、そもそも何をするものなんですか?」

先生

「SQLは、データベースに保存されているデータを、取り出したり、追加したり、変更したりするための言葉です。名簿や表を操作するための命令だと思ってください。」

生徒

「パソコンが苦手でも理解できますか?」

先生

「大丈夫です。表を見るところから順番に説明するので、紙の名簿を扱う感覚で理解できます。」

生徒

「たくさんのデータの中から、合計を出したり平均を計算したりもできるんでしょうか?」

先生

「もちろんです!今日はその『集計』という便利な機能を中心に、複数の表をくっつける方法も学びましょう。」

1. SQLとは何か?

1. SQLとは何か?
1. SQLとは何か?

SQL(シィーケル、またはエスキューエル)は、データベースと呼ばれる「大量のデータを整理して保存する箱」に対して指示を出すための専用の言語です。例えば、ネットショップの注文履歴や、学校の生徒名簿、スマホアプリのユーザー情報など、世の中のあらゆるデータはデータベースに保管されています。

パソコンをあまり触ったことがない方でも、Excel(エクセル)のような「表」をイメージすれば簡単です。縦の列(カラム)と横の行(レコード)で構成された表に対して、「この条件に合うデータを取ってきて!」「この数字を全部足して!」とお願いするのがSQLの役割です。プログラミング未経験の方でも、決まった型を覚えるだけで魔法のようにデータを操れるようになります。

エンジニアの必須スキル「SQL」を、 図解と豊富な練習問題でゼロから体系的に学びたい人へ。 MySQLやPostgreSQLなど、各種データベースに対応した不朽の入門書です。

SQL 第2版 ゼロからはじめるデータベース操作をAmazonで見る

※ Amazon広告リンク

2. データを計算する「集計関数」の基本

2. データを計算する「集計関数」の基本
2. データを計算する「集計関数」の基本

データベースには何万、何十万という膨大なデータが入ることがあります。それを人間が一つずつ電卓で計算するのは不可能です。そこで登場するのが「集計関数(しゅうけいかんすう)」です。関数とは、特定の命令を出すための「便利な道具」のようなものだと考えてください。

代表的な集計関数には、以下のものがあります。

  • COUNT(カウント): データの件数を数える
  • SUM(サム): 数値の合計を出す
  • AVG(アベレージ): 平均値を出す
  • MAX(マックス): 最大値を見つける
  • MIN(ミニマム): 最小値を見つける

COUNT関数でデータの件数を数えてみよう

まずは、お店の「商品リスト」を例にして、登録されている商品の総数を数えてみましょう。SQLでは「SELECT(セレクト)」という言葉を使って、「どこから何を持ってくるか」を指定します。


id | item_name | category | price
---+-----------+----------+-------
1  | リンゴ     | 果物     | 150
2  | バナナ     | 果物     | 100
3  | キャベツ   | 野菜     | 200
4  | トマト     | 野菜     | 120
5  | 牛乳       | 飲料     | 250
6  | お茶       | 飲料     | 150

SELECT COUNT(*)
FROM products;

COUNT(*)
----------
6

このクエリ(命令文)を実行すると、結果として「6」という数字が返ってきます。これは、表の中に6つの商品(行)があることを示しています。COUNT(*)の「*(アスタリスク)」は「すべて」という意味で、行全体を数えるときに使います。

SUM関数とAVG関数で売り上げを計算しよう

次に、数値の合計や平均を出す方法です。例えば、すべてのアイスクリームの在庫金額や、テストの平均点などを知りたいときに使います。今回は、商品価格の合計と平均を計算してみましょう。


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

SUM(price) | AVG(price)
-----------+-----------
970        | 161.66

SUM(price)は「price(価格)」という列の数字をすべて足し合わせた結果です。AVG(price)はその平均値です。このように、SQLを使うだけで一瞬にして複雑な計算が終わります。

3. カテゴリごとにまとめる「GROUP BY」

3. カテゴリごとにまとめる「GROUP BY」
3. カテゴリごとにまとめる「GROUP BY」

「全体の合計だけじゃなくて、野菜の合計や、果物の合計を知りたい!」ということもありますよね。そんな時に使うのが「GROUP BY(グループ・バイ)」という命令です。これは、特定の列(今回の場合はカテゴリ)が同じもの同士をグループにまとめる機能です。

料理で例えると、たくさんの食材を「野菜」「お肉」「魚」といったボウルに分けてから、それぞれの重さを量るようなイメージです。


SELECT category, COUNT(*), SUM(price)
FROM products
GROUP BY category;

category | COUNT(*) | SUM(price)
---------+----------+-----------
果物     | 2        | 250
野菜     | 2        | 320
飲料     | 2        | 400

実行結果を見ると、カテゴリごとに商品の数と合計金額が表示されています。これで「どのジャンルが売上に貢献しているか」といった分析が簡単にできるようになります。GROUP BYを使うときは、SELECTの後に「グループ分けに使う列の名前」を忘れずに書くのがルールです。

4. 別の表をくっつける「JOIN」の仕組み

4. 別の表をくっつける「JOIN」の仕組み
4. 別の表をくっつける「JOIN」の仕組み

実際のデータベースでは、すべての情報を一つの大きな表に入れることはしません。管理を楽にするために、情報はバラバラの表に分けて保存されています。例えば、「注文履歴の表」には「誰が買ったか」を番号(ID)だけで保存し、詳しい名前などは「お客様名簿の表」に保存します。

しかし、画面に表示するときには、それらを合体させて一つの表として見たいですよね。この「表と表をくっつける」操作を「JOIN(ジョイン)」と呼びます。最もよく使われるのが「INNER JOIN(内部結合)」です。

実際に表を合体させてみよう

「注文データ(orders)」と「商品データ(products)」の2つの表があるとします。注文データには「どの商品のIDを何個買ったか」が記録されていますが、商品名が書いてありません。これをJOINを使って解決しましょう。

【orders(注文)テーブル】


order_id | product_id | quantity
---------+------------+----------
101      | 1          | 2
102      | 3          | 1
103      | 5          | 3
104      | 2          | 5

【products(商品)テーブル】


id | item_name | price
---+-----------+-------
1  | リンゴ     | 150
2  | バナナ     | 100
3  | キャベツ   | 200
4  | トマト     | 120
5  | 牛乳       | 250

この2つの表を「product_id」と「id」をヒントにしてくっつけます。パズルのピースを合わせるような作業です。


SELECT orders.order_id, products.item_name, orders.quantity
FROM orders
INNER JOIN products ON orders.product_id = products.id;

order_id | item_name | quantity
---------+-----------+----------
101      | リンゴ     | 2
102      | キャベツ   | 1
103      | 牛乳       | 3
104      | バナナ     | 5

このように、注文番号の隣に正しい商品名が表示されるようになりました。ONという言葉の後に、「どの列とどの列が同じ意味か」を指定するのがポイントです。初心者の方は「この番号とこの番号が一致する行を横につなげて!」と指示しているのだと覚えてください。

5. データを絞り込む「WHERE」と「HAVING」の違い

5. データを絞り込む「WHERE」と「HAVING」の違い
5. データを絞り込む「WHERE」と「HAVING」の違い

SQLでデータを抽出するとき、特定の条件で絞り込みたいことがあります。ここで初心者が迷いやすいのが「WHERE(ウェア)」と「HAVING(ハビング)」の使い分けです。

WHERE: 集計をする前にデータを絞り込む(元の表から選ぶ)
HAVING: 集計をした後の結果から、さらに条件で絞り込む

例えば、「150円以上の商品だけを集計したい」場合はWHEREを使い、「カテゴリごとの合計金額が300円以上のグループだけを表示したい」場合はHAVINGを使います。手順の順番が違うだけなのですが、これは非常に重要です。SQLは実行される順番が決まっているからです。

【実行の順番イメージ】

  1. FROM(どの表から?)
  2. WHERE(条件に合う行だけ取り出す)
  3. GROUP BY(グループにまとめる)
  4. 集計関数(合計や平均を計算する)
  5. HAVING(計算結果でさらに絞る)
  6. SELECT(画面に出す項目を決める)

この流れを理解しておくと、複雑なデータ分析もスムーズに行えるようになります。例えば、昨日の売り上げデータだけを取り出して(WHERE)、店舗ごとにまとめて(GROUP BY)、合計売上が目標を超えている店舗だけを表示する(HAVING)といった具合です。

6. 便利なキーワード:エイリアス(AS)

6. 便利なキーワード:エイリアス(AS)
6. 便利なキーワード:エイリアス(AS)

最後に、もっとSQLを読みやすくするテクニックを紹介します。集計関数を使うと、実行結果の見出しが「COUNT(*)」や「SUM(price)」といった少し難しい英語になってしまいます。これを日本語やわかりやすい名前に変えるのが「AS(アズ)」、別名(エイリアス)設定です。


SELECT item_name AS 商品名, price AS 価格
FROM products;

商品名   | 価格
---------+------
リンゴ   | 150
バナナ   | 100
キャベツ | 200

このように、「AS」を使うことで、出力結果が誰にでもわかる形になります。プログラミング未経験の方が業務でSQLを使う際も、このエイリアスを使っておくと、他の人にデータを渡したときにとても喜ばれます。

SQLは一見すると難しい英語の羅列に見えますが、その正体は「コンピュータに対する丁寧なお願い」です。一つひとつの単語の意味を理解すれば、プログラミング経験がなくても、自由自在にデータを操ることができるようになります。まずは基本的な集計から試して、データベースの楽しさを体感してみてください。

カテゴリの一覧へ
新着記事
New1
Rails
RailsのエラーハンドリングUI入門!初心者でもわかる404・422・500カスタムページの作り方
New2
Rails
RailsのDB初期化をやさしく解説!初心者向けにdb:create・db:migrate・db:seedの使い方と注意点
New3
データベース
SQL集計関数・JOINを完全攻略!COUNT・SUM・AVGの使い方を初心者向けに徹底解説
New4
Ruby
Rubyの安全ナビゲーション演算子(&.)を徹底解説!nilガードでエラーを防ぐ方法
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyの真偽値とnilを徹底解説!初心者が知っておくべき判定ルールと安全な書き方
No.2
Java&Spring記事人気No2
Rails
RailsでXSSを防ぐ完全ガイド|ERB自動エスケープ・sanitize・Content Security Policy設定
No.3
Java&Spring記事人気No3
データベース
SQLのWHERE句とは?初心者でもわかる条件指定の基本を徹底解説
No.4
Java&Spring記事人気No4
Rails
Railsコレクションキャッシュ完全入門|render collectionとcacheで一覧表示を高速化する方法
No.5
Java&Spring記事人気No5
データベース
SQLのJOIN(結合)を完全攻略!INNER JOINとLEFT JOINの違いを初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Rails
RailsのCSRF対策を完全解説!authenticity_token・SameSite・APIモードまで初心者向けに理解
No.7
Java&Spring記事人気No7
データベース
データベース設計の要「主キー(プライマリキー)」とは?役割と正しい設計方法を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド