メインコンテンツへスキップ
見出し画像

集約関数をわかりやすく解説(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
    社会 | 40

    COUNT(*) を実行すると、結果は 5 になります。テーブルの全行数を数えるため、数学のscoreがNULLであっても1行としてカウントされます。

    COUNT(score) を実行すると、結果は 4 になります。score列がNULLの「数学」の行はカウントされません。

    まとめると:

    • テーブル全体の行数を知りたい場合 → COUNT(*)

    • 特定の列に値が入っている行数を知りたい場合 → COUNT(列名)

    具体例

    scoresテーブルから科目数(全行数)を取得したい場合は次のように書きます。

    SELECT COUNT(*)
    FROM scores;

    実行結果:

    COUNT(*)
    --------
    5

    scoresテーブルの全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)
    ----------
    20

    score列の最小値、20点が出力されます。


    MAX関数 — 最大値を求める

    MAX関数は、MIN関数とは逆に、指定した列の最大値を見つける関数です。

    SELECT MAX(列名)
    FROM テーブル名;

    使い方はMIN関数と全く同じです。MAXと書いて、カッコの中に最大値を求めたい列名を指定するだけです。

    覚えておきたいポイント

    ① 数値・文字列・日付、どんなタイプの列にも使える

    数値なら一番大きいもの、文字列なら辞書順で一番遅いもの、日付なら一番新しいものをMAX関数は見つけてくれます。

    ② NULLは無視される

    指定した列の中にNULLの行があっても、MAX関数はNULLを無視して最大値を求めます。

    具体例

    scoresテーブルからテストの最高点を調べたい場合は次のように書きます。

    SELECT MAX(score)
    FROM scores;

    実行結果:

    MAX(score)
    ----------
    100

    score列の最大値、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分で完了。リリース時に真っ先にお知らせします)

     
     
    IT技術の魅力を「楽しく・わかりやすく」お伝えするアカウントです。 大学時代、授業内容に挫折し、「かっこいいはずのIT」が思い描いていたものとは大きく乖離していた経験から、同じように「ITが難しい」と感じる皆さんを全力でサポートします!!!

    あなたへのおすすめ