SQLで数を数えよう!COUNT関数の基本から応用まで!

みなさんこんにちは!

今回はSQLの中でも、多用することになるであろう基本命令COUNT関数について見ていきましょう。

  • COUNTの使い方!
  • 重複を回避するには?
  • グループごとにCOUNTを使おう!
  • 他にもある!集計関数たち!

まず基本的な使い方から入り、「重複回避」や「グループごと」「その他集計関数」など、需要の高い応用的な使い方を見ていくことにします。それではよろしくお願いいたします。

目次

COUNTとは

COUNTとは集計関数の一つで、一言で言えば数を数える関数です。また集計関数とは「平均値」「合計値」など何かを集計する時に使用する関数たちのことを指します。

COUNT以外の集計関数は最後に説明するとして、まずはCOUNT関数について見てきましょう。

COUNTの使い方!

使い方は非常に簡単です。例えばユーザーのデータが入っている、userテーブルがあったとして、その数をカウントしたいとしましょう。それを実現するには以下のように入力しましょう。

実行コマンド:

SELECT COUNT( * ) FROM user;

結果:

+----------+
| count(*) |
+----------+
|        3 |
+----------+

例えば、ユーザー3人分のデータが入っている場合なら、このように6と表示されるはずです。これだけで数を出力することが可能です。COUNT関数部分のみ改めて見てみましょうか。

COUNT( [数えたい要素] )

COUNT関数で、数えたい要素を囲むだけなので簡単ですね!また今回のようにレコード数(データ数)を調べたいだけならば*を指定することも可能です。

[補足]NULLの場合はカウントされない!?

例えば、userテーブルにnameという名前要素があったとしましょう。その場合、以下のように、その要素を使用してCOUNT関数を使用することも可能です。

実行コマンド:

SELECT COUNT( name ) FROM user;

しかしその場合一つ注意点があります。nameにNULLが入っていた場合、それはカウントには含まれないのです。例えばuserテーブルには、以下のようなデータが入っていたとしましょう。

+------+--------------+
| id   | name         |
+------+--------------+
|    1 | ヤマダ       |
|    2 | スズキ       |
|    3 | タナカ       |
|    4 | タカハシ     |
|    5 | ワタナベ     |
| NULL | NULL         |
+------+--------------+

実行コマンド:

SELECT COUNT( * ) FROM user;

* で集計を行った場合は、6件と表示されます。

実行コマンド:

SELECT COUNT( name ) FROM user;

しかし name で集計を行った場合は、NULLのユーザーが数に入らず5件と表示されます。このことはNULLを含まない集計を行いたい時に利用できますので、しっかり覚えておきましょう。

重複を回避するには?

重複を回避して数を数えたいこともあるでしょう。その場合はDISTINCTを使用することで簡単に実現できます。

DISTINCTは重複レコードを1つにまとめてくれる便利な命令です。例えば、名前の種類だけを知りたいのなら、以下のように使います。

SELECT COUNT(DISTINCT name ) FROM user;

重複を回避する「DISTINCT」ぜひ覚えておいてください。

グループごとにCOUNTを使おう!

GROUP BYと組み合わせることで、種類ごとの集計を行うことも可能です。例えば、先ほどのuserテーブルの、名前ごとの人数をカウントしたい場合は以下のようになります。

SELECT name, COUNT( name ) FROM game_character GROUP BY name;
+--------------+----------------+
| name         | count(name)    |
+--------------+----------------+
| NULL         |              0 |
| スズキ       |              1 |
| タカハシ     |              1 |
| タナカ       |              1 |
| ヤマダ       |              1 |
| ワタナベ     |              1 |
+--------------+----------------+

結果としては、一人ずつしかいないので、1ずつですが…ちゃんとグループごとに集計できていますね!

※NULLが0なのは先ほどの説明の通り、COUNT(name)では、NULLは集計の対象外となるためです。

他にもある!集計関数たち!

ここで他の集計関数を簡単に見ておきましょう。記憶しておけば、いつか役立つ日が来るはずです。

AVGで平均をとろう!

平均値を取るならAVG関数です。AVG関数で囲むだけなので簡単ですね!

select AVG( [要素] ) from [テーブル名];

COUNTと違って、AVG( * )などとするとエラーになるため注意しましょう。

* だと、平均の出しようがないですからね…

SUMで合計をとろう!

合計値を取るならSUM関数です。こちらも要素は数字を入れるようにしましょう。

select SUM( [要素] ) from [テーブル名];

MAXで最大をとろう!

最大値のみを取るならMAX関数です。

select MAX( [要素] ) from [テーブル名];

MINで最小をとろう!

最小値のみを取るならMIN関数です。

select MIN( [要素] ) from [テーブル名];

まとめ

以上でCOUNT関数の説明を終わります。「集計をする」というシンプルな関数ゆえに、利用頻度も多くいろいろな使われ方をしますね!今回学んだことの中に、今必要としている知識が含まれていたのなら幸いです。

また他の技術もいつか必要になった時には、このページを参考にしてみてください!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次