最終更新日:2026年8月30日
fe fe-technology database sql
まず結論
SQLの集計関数は、複数の行をまとめて件数・合計・平均・最大値などを求める関数です。
基本情報技術者試験では、まず次の4つを切り分けられれば十分です。
| 関数 | 求めるもの | 判断ワード |
|---|---|---|
COUNT |
件数 | 何行あるか |
SUM |
合計 | 全部足す |
AVG |
平均 | 合計÷件数 |
MAX |
最大値 | 一番大きい値 |
さらに WHERE がある場合は、次の順で考えます。
WHEREで対象行を絞る
↓
残った行に集計関数を使う
試験中は、
先にWHERE、あとで集計。COUNTは件数、SUMは合計。
と覚えると迷いにくくなります。
直感的な説明
次の売上表を考えます。
| 商品 | 数量 |
|---|---|
| A | 3 |
| B | 2 |
| A | 1 |
| B | 2 |
この表に集計関数を使うと、結果は次のようになります。
COUNT(*)
→ 行数を数える
→ 4
SUM(数量)
→ 数量を全部足す
→ 8
AVG(数量)
→ 数量の平均
→ 2
MAX(数量)
→ 一番大きい数量
→ 3
ここで、Aだけを対象にしたい場合は WHERE を使います。
SELECT AVG(数量)
FROM 売上
WHERE 商品 = 'A';
このSQLは、いきなり平均するのではありません。
Aの行だけ残す
→ 3, 1
↓
平均する
→ 2
この「絞ってから集計する」という順番が重要です。
定義・仕組み
COUNT:件数を数える
COUNT は、行や値の件数を数えるための集計関数です。
SELECT COUNT(*)
FROM 売上;
COUNT(*) は、表の行数を数えます。
4行ある
→ COUNT(*) = 4
試験では、COUNT と SUM を混同しないことが重要です。
COUNT
→ 何件あるか
SUM
→ 値を全部足す
COUNT(*)とCOUNT(列名)の違い
COUNT(*) は行数を数えます。
一方、COUNT(列名) は、その列で NULL ではない値の件数を数えます。
例えば、次の表を考えます。
| ID | 備考 |
|---|---|
| 1 | 済 |
| 2 | NULL |
| 3 | 済 |
この場合、
COUNT(*)
→ 3
COUNT(備考)
→ 2
です。
COUNT(*)は行、COUNT(列名)はNULLを除いた値の件数。
SUM:合計する
SUM は、指定した列の数値を合計します。
SELECT SUM(数量)
FROM 売上;
数量が 3, 2, 1, 2 なら、
3 + 2 + 1 + 2
= 8
です。
AVG:平均する
AVG は、指定した列の平均値を求めます。
SELECT AVG(数量)
FROM 売上;
数量が 3, 2, 1, 2 なら、
(3 + 2 + 1 + 2) ÷ 4
= 2
です。
MAX:最大値を求める
MAX は、指定した列の最大値を返します。
SELECT MAX(数量)
FROM 売上;
数量が 3, 2, 1, 2 なら、最大値は 3 です。
ここで注意したいのは、MAX(数量) は最大値を含む行全体を返すのではなく、数量列の最大値そのものを返すという点です。
WHEREは集計の前に効く
WHERE は、集計対象となる行を絞る条件です。
例えば、
SELECT SUM(数量)
FROM 売上
WHERE 商品 = 'B';
なら、処理のイメージは次のとおりです。
商品Bの行を残す
→ 2, 2
↓
SUMする
→ 4
試験では、SQLを左から読むより、次のように役割で読むと整理しやすくなります。
FROM
→ どの表か
WHERE
→ どの行を使うか
SELECTの集計関数
→ 残った行から何を求めるか
このテーマは基本情報技術者試験の「データベース」「SQL」と関係します。公式の出題範囲や最新シラバスは、IPA:試験要綱・シラバスについてから確認できます。
科目Aでどう出る?
科目Aでは、表と複数のSQL文を見て、実行結果を比較させる問題が出ます。
このタイプは、各SQLを一度に理解しようとせず、次の順で処理すると安定します。
1. WHEREがあるか確認する
2. 対象行だけ残す
3. COUNT / SUM / AVG / MAX の意味を確認する
4. 結果を計算する
5. 選択肢同士を比較する
選択肢を切る判断表
| SQLの形 | 判断 |
|---|---|
COUNT(*) |
行数を数える |
SUM(列) |
列の値を全部足す |
AVG(列) |
列の平均を求める |
MAX(列) |
列の最大値を求める |
WHERE 条件 |
条件に合う行だけを対象にする |
例えば、次のSQLを見たとします。
SELECT AVG(数量)
FROM 売上
WHERE 商品 = 'A';
試験中は、
WHERE 商品='A'
→ Aだけ残す
AVG(数量)
→ 残った数量の平均
と分解します。
GROUP BYがある場合
GROUP BY は、行をグループに分けて、グループごとに集計するときに使います。
SELECT 商品, SUM(数量)
FROM 売上
GROUP BY 商品;
結果は、商品ごとの合計になります。
A → 4
B → 4
つまり、
WHERE
→ 行を絞る
GROUP BY
→ 行をグループに分ける
SUM / AVG / COUNT / MAX
→ 各対象を集計する
と役割を分けます。
GROUP BY や集約関数を含むビューは更新できないと判断する問題もあります。関連する考え方は、ビューとは?元の表との違い・SELECT権限・更新可能ビューで整理しています。
どんな場面で使う?
集計関数は、表に保存された多数のデータを要約するときに使います。
例えば、売上データなら次のように使えます。
注文件数を知りたい
→ COUNT
売上金額の合計を知りたい
→ SUM
平均注文金額を知りたい
→ AVG
最大注文金額を知りたい
→ MAX
実務でも、一覧の全行を目で確認するのではなく、SQLで集計して全体の傾向を確認します。
データベースの表をどのように分割して重複や更新時異状を減らすかは、データベース正規化とは?も合わせて確認すると、表の設計とSQLによる集計の役割を分けて理解できます。
よくある誤解・混同
COUNTとSUMを同じものだと思う
違います。
例えば、数量が 3, 2, 1, 2 の4行なら、
COUNT(*) = 4
SUM(数量) = 8
です。
COUNTは件数、SUMは中身の合計。
WHEREを集計後に適用すると考える
基本的な問題では、WHERE で対象行を絞ってから集計します。
WHERE
↓
集計
という順で考えます。
MAXは最大の行を返す
MAX(数量) が返すのは、数量列の最大値です。
MAX(数量)
→ 3
その値を持つ行の他の列まで自動的に返すわけではありません。
COUNT(*)とCOUNT(列名)は必ず同じ
列に NULL があると結果が変わります。
COUNT(*)
→ 行数
COUNT(列名)
→ NULLでない値の件数
AVGはSUM÷COUNT(*)と必ず同じ
AVG(列名) は、通常その列の NULL を除いて平均します。
そのため、NULL を含む表では、単純に SUM(列名) ÷ COUNT(*) とすると一致しない場合があります。
FE試験では、NULL が明示されていない基本問題なら、まず通常の平均計算として考えれば十分です。
まとめ(試験直前用)
COUNTは件数SUMは合計AVGは平均MAXは最大値WHEREがあれば、先に対象行を絞るCOUNT(*)は行数、COUNT(列名)はNULLでない値の件数GROUP BYはグループごとに集計する
一言で覚えるなら、
先にWHEREで絞る。COUNTは数える、SUMは足す、AVGは平均、MAXは最大。