Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

データベース処理で、テーブルから取得したレコードの件数を知りたい場合には「COUNT関数」を利用することが可能です。

本記事では、COUNT関数の使い方についてサンプルコードを交えながら詳しく解説していきます。

SQLでレコード件数を取得するCOUNT関数の使い方


まずはSQLでレコード件数を取得するために利用されるCOUNT件数の使い方について確認してみましょう。

基本構文

COUNT関数の記述方法は下記の通りです。

SELECT COUNT(カラム名)
FROM テーブル名;

サンプル

サンプルとして「member」テーブルを作成し、下記のデータを用意しました。

+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    1 | 田中はじめ       | チーム1     |
|    2 | 鈴木ごろう       | チーム2     |
|    3 | 山田あかね       | チーム3     |
|    4 | 斎藤ゆか         | チーム2     |
|    5 | 坂本一生         | チーム1     |
|    6 | 安倍みき         | チーム1     |
|    7 | NULL            | NULL       |
+------+-----------------+------------+

実際にCOUNT関数を指定して取得結果を確認してみましょう。

mysql> select count(*) from member;
+----------+
| count(*) |
+----------+
|        7 |
+----------+
1 row in set (0.05 sec)

カラム名に全てのカラムを意味する「*」を指定した結果、テーブルのレコード数が取得出来ていることをご確認頂けます。

SQLでレコード件数を取得する際の注意点


上述したようにCOUNT関数を利用すれば簡単にレコードの件数を取得することが可能ですが、注意しておかなければならないポイントがあります。

NULLデータを含んだカラムが存在する場合、指定するカラムによって取得結果が変わってしまうためです。

NULLを含んだカラム名の指定

まずはNULLを含んだカラム名をCOUNT関数の引数にして処理を実施してみましょう。

mysql> select count(name) from member;
+-------------+
| count(name) |
+-------------+
|           6 |
+-------------+
1 row in set (0.01 sec)

取得結果が「*」を指定した場合と異なり、NULLデータのレコードを除いた件数が表示されていることをご確認頂けます。

NULLを含まないカラム名の指定

ではNULLを含まないカラム名をCOUNT関数の引数に指定した場合、どのような結果が取得出来るのでしょうか。

mysql> select count(id) from member;
+-----------+
| count(id) |
+-----------+
|         7 |
+-----------+
1 row in set (0.00 sec)

NULLのデータが存在しないカラムの場合、テーブルに存在するレコード全件の件数が返却されていますね。

ポテパンダの一言メモ

ちなみに「*」を指定した場合、全てのカラムデータがNULLの場合でも、レコードが存在していれば件数としてカウントされます。

SQLのレコード件数を様々な条件で取得してみよう


COUNT関数による基本的なレコード件数の取得方法は確認出来ましたので、次に応用編ということで様々な条件での取得にチャレンジしていきたいと思います。

グループ化して件数を取得する

上記サンプルの場合、チーム毎に何件のデータがあるのか確認したいケースは良くあります。

グループ化して件数を取得したい場合には「GROUP BY句」を利用することが可能です。

実際にチーム名毎にグループ化して表示するサンプルSQLを掲載します。

mysql> select team_name, count(team_name) from member group by team_name;
+------------+------------------+
| team_name  | count(team_name) |
+------------+------------------+
| チーム1     |                3 |
| チーム2     |                2 |
| チーム3     |                1 |
| NULL       |                0 |
+------------+------------------+
4 rows in set (0.00 sec)

ちなみにNULLの件数も確認したい場合にはCOUNT関数の引数に「*」を指定します。

mysql> select team_name, count(*) from member group by team_name;
+------------+----------+
| team_name  | count(*) |
+------------+----------+
| チーム1     |        3 |
| チーム2     |        2 |
| チーム3     |        1 |
| NULL       |        1 |
+------------+----------+
4 rows in set (0.00 sec)

重複レコードを除いた件数を取得する

指定したカラムに何種類のデータが格納されているのか知りたいケースも存在します。

重複レコードを取り除いて件数を確認するには「DISTINCT」を組み合わせることで実現可能です。

mysql> select  count(distinct team_name)from member;
+---------------------------+
| count(distinct team_name) |
+---------------------------+
|                         3 |
+---------------------------+
1 row in set (0.01 sec)
ポテパンダの一言メモ

NULLを除いた上で、重複データを削除した件数が表示されています。

条件を指定して件数を比較する

例えばサンプルの場合、チーム1のデータとチーム2のデータがそれぞれ何件なのかを確認したいケースは良くあります。

COUNT関数の引数には条件式を記述することが出来るため、下記のように記述することで実現可能です。

mysql> select  count(team_name="チーム1" or NULL), count(team_name="チーム2" or NULL)from member;
+---------------------------------------+---------------------------------------+
| count(team_name="チーム1" or NULL)     | count(team_name="チーム2" or NULL)     |
+---------------------------------------+---------------------------------------+
|                                     3 |                                     2 |
+---------------------------------------+---------------------------------------+
1 row in set (0.01 sec)

「OR NULL」ってなんだと疑問に思いますよね。

「OR NULL」を入力せずにSQLを実行してみましょう。

mysql> select  count(team_name="チーム1"), count(team_name="チーム2")from member;
+-------------------------------+-------------------------------+
| count(team_name="チーム1")     | count(team_name="チーム2")     |
+-------------------------------+-------------------------------+
|                             6 |                             6 |
+-------------------------------+-------------------------------+
1 row in set (0.00 sec)

COUNT関数では「NULL以外の値を保持するレコード」の件数を取得するようで、「team_name=”チーム1″」の条件式の答えは「TRUE」か「FALSE」にしかなりません。

つまりCOUNT関数の考え方では結果がどちらであってもNULL以外の値なので、件数の取得対象になるんですね。

「OR NULL」を付けることにより、「条件式に一致するまたはNULLのデータ」が取得条件に変わります。

上記の結果からCOUNT関数はNULLの値をカウント対象として除外するため、結果的に条件式で「TRUE」となったデータだけが件数として表示される仕組みです。

さいごに:SQLのCOUNT関数を利用してレコード件数を取得してみよう!


本記事では、SQLのCOUNT関数を利用したレコード件数の取得方法について確認してきました。

COUNT関数の使い方自体は簡単ですが、NULL値の取り扱いにだけは気をつける必要があります。

NULL値を含んだ件数が取得したいのか、NULL以外のデータ件数が取得したいのか意図をはっきりさせた上で利用するようにしましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。