基本情報技術者試験 (FE) 科目 A — データベース
集約関数 — COUNT・SUM・AVG・MAX・MIN
集約関数は複数の行を 1 つの値にまとめる関数。COUNT は件数、SUM は合計、AVG は平均、MAX と MIN は最大・最小を返す。COUNT(*) 以外は NULL を無視して集計する。
集約関数は複数行を 1 つの値にする
ここまでの SQL は「行を絞って列を取り出す」だけでした。集約関数は、複数の行をまとめて 1 つの値を計算します。
| 関数 | 意味 | NULL の扱い |
|---|---|---|
COUNT(*) | 行数 | NULL も数える |
COUNT(列) | その列が NULL でない行数 | NULL を除く |
SUM(列) | 合計 | NULL を除く |
AVG(列) | 平均 | NULL を除く(分母からも除く) |
MAX(列) / MIN(列) | 最大 / 最小 | NULL を除く |
NULL の扱いが試験の狙いどころ
サンプルの従業員表には、給与が未設定(NULL)の行が 1 行あります。 7 行のうち 1 行が NULL なので:
COUNT(*)は 7(NULL も数える)COUNT(給与)は 6(NULL を除く)AVG(給与)は 6 行の合計 ÷ 6(7 では割らない)
「NULL を 0 とみなすか」ではなく「集計の対象から外す」のが SQL の規則です。平均を出すときに分母が変わる点が特に狙われます。
試す: COUNT(*) と COUNT(給与) の差が、給与が NULL の 1 行分
対象が 0 件のときの戻り値
SELECT COUNT(*), SUM(給与) FROM 従業員 WHERE 部門コード = 'D99'
-- COUNT は 0、SUM は NULLCOUNT だけが 0 を返し、他は NULL です。 「該当が無い」ことと「合計が 0」は違う、という考え方です。
試す: COUNT だけが 0 を返し、SUM と AVG は NULL になる
集約関数は WHERE には書けない
WHERE COUNT(*) > 1 はエラーになります。 WHERE は 1 行ずつの絞り込みで、集約より前に評価されるからです。 グループに対する条件はHAVING に書きます。 次のレッスンで詳しく扱います。
試験で問われるポイント
- COUNT(*) と COUNT(列) の値のずれ。NULL を含む列で必ず問われます
- AVG が NULL を分母から除くこと
- 0 件のときに SUM が NULL(0 ではない)こと
- 集約関数を WHERE に書いた選択肢は誤りだと見抜けること
よくある疑問
「集約関数」の練習問題 2 問
読んだ内容がそのまま出題されます。解答すると解説と、 その SQL を実行シミュレーターで開くリンクが出ます。
自由に試す / 他のレッスンを読む
データベース分野をもっと学ぶ(おすすめ書籍)
イラスト主体で科目Aの全範囲を通読できる入門書。用語の土台を作ってから科目Bのアルゴリズムに入ると理解が速い。
科目Aの頻出テーマを図と語呂で押さえる入門書。参考書と問題集を兼ねるので初受験の一冊目に選びやすい。
公開問題を大量に解いて仕上げるための問題集。擬似言語の読解に慣れた後、本番形式で時間配分を試す段階で使う。
本セクションはAmazonアソシエイトのリンクを含みます。
プログラムの読み方でつまずいたら。
たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。
「教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。」
— H 様(DB・SQL コース受講)「体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。」
— M 様(DB・SQL コース受講)「大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。」
— K 様(DB・SQL コース受講)