
集約関数をわかりやすく解説(COUNT・SUM・AVG・MAX・MIN)
この記事では、SQLでデータを集計するときに欠かせない「集約関数」について解説します。データの件数を数えたり、合計・平均・最大値・最小値を求めたりする場面で大活躍する、COUNT・SUM・AVG・MIN・MAXの5つをわかりやすく説明します。
YouTubeでも動画で解説していますので、動画で学びたい方はこちらもどうぞ!
🎓 Udemyで体系的に学びたい方へ
応用情報技術者試験「データベース分野」の対策コースをUdemyで公開中です。イラストとアニメーションで仕組みから丁寧に解説しています。
👉 【応用情報技術者試験】データベース分野・午前(科目A)完全攻略コース
集約関数とは?
集約関数とは、複数のレコード(行)をまとめて、1つの値を返す関数のことです。
たとえば、自分の各教科のテスト結果が入った scores テーブルがあったとします。このテーブルを見て、
全部で何科目受験したのか(行数)
合計点は何点か
平均点は何点か
一番点数が高い科目はどれか(最大値)
一番点数が低い科目はどれか(最小値)
…などを知りたい場面は多いですよね。
これらをデータを1件ずつ目で見て計算するのは大変です。そこで登場するのが集約関数です!集約関数を使えば、これらの情報を一瞬で取得できます。
今回紹介する代表的な集約関数は以下の5つです。
・COUNT:レコードの件数を数える
・SUM:指定した列の合計値を計算する
・AVG:指定した列の平均値を計算する
・MIN:指定した列の最小値を求める
・MAX:指定した列の最大値を求める
それでは、各関数を詳しく見ていきましょう。
COUNT関数 — レコードの件数を数える
COUNT関数は、レコードの件数を数える関数です。
SELECT COUNT(列名)
FROM テーブル名;COUNT(列名) と COUNT(*) の違い
COUNTには、カッコの中の書き方が2種類あります。
COUNT(*) とすると、NULLを含むすべてのレコードの件数を数えます。
COUNT(列名) とすると、指定した列の値がNULLではないレコードの件数だけを数えます。
少しわかりづらいので、具体例で確認しましょう。
たとえば、以下のような scores テーブルがあるとします。
subject | score
---------------
国語 | 80
数学 | NULL
英語 | 70
理科 | 50
社会 | 40COUNT(*) を実行すると、結果は 5 になります。テーブルの全行数を数えるため、数学のscoreがNULLであっても1行としてカウントされます。
COUNT(score) を実行すると、結果は 4 になります。score列がNULLの「数学」の行はカウントされません。
まとめると:
テーブル全体の行数を知りたい場合 → COUNT(*)
特定の列に値が入っている行数を知りたい場合 → COUNT(列名)
具体例
scoresテーブルから科目数(全行数)を取得したい場合は次のように書きます。
SELECT COUNT(*)
FROM scores;実行結果:
COUNT(*)
--------
5scoresテーブルの全5行が出力されます。
SUM関数 — 合計値を計算する
SUM関数は、指定した列の合計値を計算する関数です。
SELECT SUM(列名)
FROM テーブル名;覚えておきたいポイント
① 数値型の列に対して使用する
SUM関数は数字の合計を計算するための関数なので、score(点数)のような数値型の列に対して使います。文字列や日付の列には使えません。
② NULLは無視される
合計したい列の中にNULLの行があっても、SUM関数はNULLを「0」として扱うのではなく、その行自体を計算から除外します。
具体例
scoresテーブルの合計点を取得したい場合は次のように書きます。
SELECT SUM(score)
FROM scores;実行結果:
SUM(score)
----------
240「数学」のscoreはNULLですが、SUM関数はその行を無視して、他の4科目(80+70+50+40=240)の合計を計算しています。
AVG関数 — 平均値を計算する
AVG関数は、指定した列の平均値を計算する関数です。
SELECT AVG(列名)
FROM テーブル名;覚えておきたいポイント
SUM関数と同様に、以下の2点を押さえておきましょう。
① 数値型の列に対して使用する
AVG関数は数字の平均を計算するための関数なので、score(点数)のような数値型の列に対して使います。文字列や日付の列には使えません。
② NULLは無視される
平均を出したい列にNULLの行があっても、AVG関数はNULLを「0」として扱うのではなく、その行自体を計算から除外します。これは重要なポイントです。NULLを「0点」として平均に含めてしまうと、正しい平均値が出ないためです。
具体例
scoresテーブルの各教科の平均点を計算したい場合は次のように書きます。
SELECT AVG(score)
FROM scores;実行結果:
AVG(score)
----------
60「数学」のscoreはNULLなので、AVG関数は「数学」の点数を0点として計算するのではなく、「数学」の行をなかったことにして他の4科目(80+70+50+40=240)の平均、つまり 240÷4=60 を計算しています。
MIN関数 — 最小値を求める
MIN関数は、指定した列の最小値を求める関数です。
SELECT MIN(列名)
FROM テーブル名;覚えておきたいポイント
① 数値・文字列・日付、どんなタイプの列にも使える
数値の大小はもちろん、文字列なら辞書順で一番早いもの、日付なら一番古いものをMIN関数は見つけてくれます。SUMやAVGが数値型のみだったのに対して、MIN・MAXはより幅広く使えます。
② NULLは無視される
指定した列の中にNULLの行があっても、MIN関数はNULLを無視して最小値を求めます。
具体例
scoresテーブルからテストの最低点を調べたい場合は次のように書きます。
SELECT MIN(score)
FROM scores;実行結果:
MIN(score)
----------
20score列の最小値、20点が出力されます。
MAX関数 — 最大値を求める
MAX関数は、MIN関数とは逆に、指定した列の最大値を見つける関数です。
SELECT MAX(列名)
FROM テーブル名;使い方はMIN関数と全く同じです。MAXと書いて、カッコの中に最大値を求めたい列名を指定するだけです。
覚えておきたいポイント
① 数値・文字列・日付、どんなタイプの列にも使える
数値なら一番大きいもの、文字列なら辞書順で一番遅いもの、日付なら一番新しいものをMAX関数は見つけてくれます。
② NULLは無視される
指定した列の中にNULLの行があっても、MAX関数はNULLを無視して最大値を求めます。
具体例
scoresテーブルからテストの最高点を調べたい場合は次のように書きます。
SELECT MAX(score)
FROM scores;実行結果:
MAX(score)
----------
100score列の最大値、100点が出力されます。
まとめ
今回は、SQLの集約関数である COUNT・SUM・AVG・MIN・MAX について学びました。
■ COUNT(*)
・用途:全行数を数える
・NULLの扱い:NULLも含む
■ COUNT(列名)
・用途:NULL以外の行数を数える
・NULLの扱い:NULLを除く
■ SUM(列名)
・用途:合計値を計算する(数値型のみ)
・NULLの扱い:NULLを無視
■ AVG(列名)
・用途:平均値を計算する(数値型のみ)
・NULLの扱い:NULLを無視(0として扱わない)
■ MIN(列名) / MAX(列名)
・用途:最小値・最大値を求める(数値・文字列・日付)
・NULLの扱い:NULLを無視
これらの関数を使いこなせるようになると、データベースから欲しい情報を素早く取り出せるようになります。最初は難しく感じるかもしれませんが、ぜひ実際に手を動かしてSQLを書いてみてください!
📺 この記事はYouTube動画でも解説しています
チャンネル登録もぜひよろしくお願いします!
🎓 Udemyコースで学ぼう
データベース分野を体系的に学ぶなら:
👉 【応用情報技術者試験】データベース分野・午前(科目A)完全攻略コース
https://www.udemy.com/course/applied-information-technology-database-master-a/
セキュリティ分野の対策も忘れずに:
👉 応用情報技術者試験 午前コース(セキュリティ)
https://www.udemy.com/course/applied-information-technology-security-master-a/
👉 応用情報技術者試験 午後コース(セキュリティ)
https://www.udemy.com/course/applied-information-technology-security-master-b/
🚀 AIに「なぜ?」を聞ける過去問アプリ「tokeru」を開発中です
過去問を解いて終わりにせず、間違えた問題の「なぜ」をAIに聞いて、弱点を狙って復習できる学習アプリを開発しています。
11月1日、AP前期・科目A試験の真っ最中にリリース予定です。試験直前の追い込みに間に合わせたい方は、今すぐ事前登録を。
👉 tokeruの事前登録はこちら(1分で完了。リリース時に真っ先にお知らせします)