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

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

この記事を書いた人

学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!

目次