どうもニコイチです。「本の数って、いったいどのくらいあるんだろう?」――ふとそんな疑問を持ったことはありませんか? たとえば「蔵書が増えすぎて管理が大変」「書評サイトで高評価の本はどれだろう?」など、膨大なデータから必要な情報を取り出すのは意外と難しいものです。そんなときに活躍するのが、SQLの集計関数。データの合計値や平均値、大きさや小ささなどを簡単に調べられるので、「たくさんある中から欲しい数字だけ知りたい!」というときにとっても便利なんです。今回は、SQLの基本的な集計機能「COUNT」「SUM」「AVG」「MAX」「MIN」の使い方をわかりやすく解説していきます。ぜひ一緒に、データの世界をのぞいてみましょう!
目次
COUNT:データの個数を数える
● COUNTとは?
- COUNTは、その名の通り「数える(カウントする)」ための関数です。
- 行(レコード)の数を調べたいときや、特定の列に入っている値(NULL以外)の数を調べたいときに使います。
● COUNT(*) と COUNT(列名)のちがい
COUNT(*)
はテーブルにある行を「とにかく全部」数えます。NULL(値なし)も含むため、「テーブルに何行あるのか」を正確に調べたい場合に使います。COUNT(列名)
は、列名のところがNULLでない行だけを数えます。欠損値(NULL)はカウントしません。
● 具体例
- 例:
books
テーブルには、書籍の名前(Name)や著者(Author)などの情報があります。SELECT COUNT(Name), COUNT(Author) FROM books;
COUNT(Name)
は書籍名が入っている行(NULLじゃない部分)だけを数えます。COUNT(Author)
は著者が入っている行(NULLじゃない部分)だけを数えます。
COUNT + DISTINCT:重複しないデータの個数を数える
● DISTINCTとは?
- 重複している値を1つにまとめる仕組みです。
COUNT(DISTINCT 列名)
とすることで、「列名の重複を除いた数」だけを数えます。
● 具体例
- 例:ユニークな書籍名(重複しない書籍名)の数を知りたい場合
SELECT COUNT(DISTINCT Name) FROM books;
- 同じ名前の本が複数登録されていても、重複をまとめて1つと数えます。
SUM:合計を計算する
● SUMとは?
- SUMは、文字どおり「合計(サム)」を求める関数です。数値カラム(例:価格やレビュー数)に使えます。
● 具体例
- 例:レビュー数(Reviews)の合計を求めたい場合
SELECT SUM(Reviews) FROM books;
- これで、テーブルにあるすべての本のレビュー数を足し合わせた合計値が返ってきます。
AVG・MAX・MIN:平均・最大・最小を調べる
● AVG:平均を求める
- 指定した列の平均値を返します。
- 例:全書籍の価格(Price)の平均値を知りたい場合
SELECT AVG(Price) FROM books;
● MAX:最大値を求める
- 指定した列の中で一番大きい値を返します。
- 例:全書籍の価格(Price)の最大値を知りたい場合
SELECT MAX(Price) FROM books;
● MIN:最小値を求める
- 指定した列の中で一番小さい値を返します。
- 例:全書籍の価格(Price)の最小値を知りたい場合
SELECT MIN(Price) FROM books;
● まとめて取得する書き方
- 平均・最大・最小を一度に表示させることもできます。
SELECT AVG(Price), MAX(Price), MIN(Price) FROM books;
- 一行でまとめて取得すると、値を見比べやすいのでおすすめです。
使い方のイメージ表
下の表に、今回紹介した集計関数と簡単な意味をまとめました。
関数 | 役割 | サンプルクエリ例 |
---|---|---|
COUNT(*) | テーブルの行数全体を数える(NULL含む) | SELECT COUNT(*) FROM books; |
COUNT(列名) | 列にNULLでない値が入っている数を数える | SELECT COUNT(Name) FROM books; |
COUNT(DISTINCT 列名) | 列の重複を取り除いた上で、その数を数える | SELECT COUNT(DISTINCT Name) FROM books; |
SUM(列名) | 指定した列の合計値を求める | SELECT SUM(Reviews) FROM books; |
AVG(列名) | 指定した列の平均値を求める | SELECT AVG(Price) FROM books; |
MAX(列名) | 指定した列の最大値を求める | SELECT MAX(Price) FROM books; |
MIN(列名) | 指定した列の最小値を求める | SELECT MIN(Price) FROM books; |
ちょっとしたポイント
- 数値型のカラムにのみ使える関数
SUM
,AVG
,MAX
,MIN
などは、数値型データに向いています。文字列(テキスト)の列に使うと、エラーになったり期待通りに動かなかったりします。
- NULLへの注意
- NULLが含まれる列を集計するときは、思ったより値が小さくなったり、データがカウントされなかったりします。たとえば、
COUNT(列名)
を使うとNULLはカウントされません。
- NULLが含まれる列を集計するときは、思ったより値が小さくなったり、データがカウントされなかったりします。たとえば、
- 集計結果のカラム名を変えたい場合
- 結果にわかりやすい見出しをつけたい場合は、
AS
句を使います。ただし今回の課題ではASを使わない指示なので省略しました。
- 結果にわかりやすい見出しをつけたい場合は、
- 大規模データでも素早く計算
- SQLの集計関数は、とても高速に動くように設計されています。大量のデータでもうまくインデックスを使うと、思いのほか早く結果が返ってきます。
7. 参考情報
- 公式のSQLドキュメント (例えばMySQLの場合は MySQLドキュメント、PostgreSQLなら PostgreSQLドキュメント) にも詳細が書かれています。
- Stack Overflow Developer Survey では、多くのエンジニアがSQLを日常的に使っていると回答しています。分析やレポート作成など、ビジネスから趣味まで幅広い用途に役立つため、初歩を押さえておくと後々便利です。
コメント