バナー画像

SQLでテーブルの行数を調べるときにはCOUNT関数を使用すます。

テーブルに格納されているデータの件数を調べたり、特定の条件に一致するレコードの件数を調べたり、さまざまなシーンで利用します。

この記事では、SQLのCOUNT関数を使って、データベース・テーブルの件数を取得する方法について解説します。

COUNT関数

SQLのCOUNT関数は、その名の通り、テーブルのレコード数を数える関数です。

COUNT関数の構文は次のようになっています。

COUNT(式)

引数の式には、行数を取得する列名(カラム名)や条件式を指定します。また*(アスタリスク)を指定すると、すべてのレコードの行数をカウントします。

では、COUNT関数を使って行数を数える例を、いくつか見ていきましょう。

テーブルの行数(レコード数)を数える

まず最も簡単な例である、COUNT(*)でテーブルの行数(レコード数)を数える方法を紹介します。

scoresテーブルには、次のデータが格納されている例で解説します。

Id name score
1 Yamada 100
2 Suzuki 80
3 Tanaka (NULL)
4 Sato 90
5 Hayashi 90

テーブルの行数を数える場合は、FROM句に行数を数えたりテーブル名を指定してCOUNT関数を使用します。

SELECT COUNT(*) FROM scores

(実行結果)
COUNT
----------
5

列名を指定して行数(レコード数を)数える

COUNT関数の引数に、列名(カラム名)を指定して行数を数えることもできます。
列名を指定してCOUNT関数を実行すると、指定した列の値でNULLを除いた行数が取得できます。

先ほどの例に続き、scoresテーブルには、次のデータが格納されている例で解説します。

Id name score
1 Yamada 100
2 Suzuki 80
3 Tanaka (NULL)
4 Sato 90
5 Hayashi 90

 

では、score列を引数に指定して、COUNT関数を実行してみましょう。

SELECT COUNT(score) FROM scores

(実行結果)
COUNT
----------
4

scoresテーブルには全部で5レコードのデータが登録されていますが、score列には1件NULLのデータが存在しているため、NULLを除いた4件の行数がカウントされます。

ポテパンダの一言メモ

このように、COUNT関数の引数に列名を指定すると、NULLの行はカウント対象外になるため、単純にテーブルのレコード数だけを調べる用途で使用するときには注意が必要です。

DISTINCTを指定して重複行を除外

COUNT関数の引数に、COUNT(DISTINCT 列名)のように、DISTINCTキーワードを使用すると、重複した行を取り除いた上で、行数をカウントすることができます。

scoresテーブルのcity列に対し、重複を除いた行数をカウントしてみましょう。

Id name city score
1 Yamada Tokyo 100
2 Suzuki Tokyo 80
3 Tanaka Osaka (NULL)
4 Sato Osaka 90
5 Hayashi Nagoya 90

 

COUNT関数の引数に、DISTINCTキーワードを指定して、SQLを実行します。

SELECT COUNT( DISTINCT city ) FROM scores

(実行結果)
COUNT
----------
3

上の実行結果のように、scoresテーブルのcity列の重複データが取り除かれ、結果が3件になっていることが分かります。

DISTINCTキーワードを使用する際、NULL のデータが存在していた場合、結果はどうなるでしょうか?実際に試してみましょう。

scoresテーブルのcity列にNULLのデータを設定します。

Id name city score
1 Yamada Tokyo 100
2 Suzuki Tokyo 80
3 Tanaka (NULL) (NULL)
4 Sato (NULL) 90
5 Hayashi Nagoya 90

 

先ほどのSQLと同様に、COUNT関数の引数に、DISTINCTキーワードを指定して、SQLを実行します。

SELECT COUNT( DISTINCT city ) FROM scores

(実行結果)
COUNT
----------
2

結果は「2」となりました。
これは、NULLを除外データで、DISTINCTキーワードで重複した行が取り除かれるため、「Tokyo」と「Nagoya」のデータでカウントされているためです。

GROUP BYとCOUNT関数を使った集計

指定したカラムや式を条件に、データをグループ化するGROUP BYCOUNT関数を組み合わせて使用することで、グループ毎のデータ件数を集計できます。

では、scoresテーブルのcity列毎の行数(レコード数)を求める例で見ていきましょう。

Id name city score
1 Yamada Tokyo 100
2 Suzuki Tokyo 80
3 Tanaka Osaka (NULL)
4 Sato Osaka 90
5 Hayashi Nagoya 90

 

SQLは次のように、GROUP BYcity列を指定してグループ化し、COUNT関数でグループ毎の行数(レコード数)を求めます。

SELECT city, COUNT(id) FROM scores GROUP BY city

(実行結果)

city     COUNT
--------------
Tokyo    2
Osaka    2
Nagoya   1

GROUP BYを使用すうるとこで、上の結果のようにグループ毎に行数が求められました。

これを応用すれば、さまざま観点でのデータ集計ができます。
例えば、男女別の人数を数えたり、ゲームランク別のユーザー数を求めたりと、データの分析はビジネスにおいて非常に重要な役割があるため、是非覚えておきましょう。

大量データをカウントする時

データベースのテーブルに、億を超えるような行(レコード)が登録されているテーブルの場合、テーブルの件数をCOUNT関数で取得するだけでも、時間がかかることがあります。

単純にテーブルに登録されているデータの、総行数が知りたいだけであれば、統計情報から確認することで、高速に調べることができます。

MySQLであれば、次のSQLのようにINFORMATION_SCHEMAスキーマからテーブルのメタデータを確認するとこで、テーブルの行数(レコード数)を確認できます。

select table_name, table_rows from information_schema.TABLES

ただし、INFORMATION_SCHEMAスキーマから取得できるのは、あくまでメタデータであるため、メタデータが更新されていない場合、実際のテーブルに登録されている行数と異なる可能性があります。

INFORMATION_SCHEMAスキーマから取得できる情報は、あくまで参考情報であるため、正確な行数が求められるシーンや、実際のアプリケーション開発では使用しないほうがよいでしょう。

まとめ

SQLでテーブルの行数を調べる時に使用するCOUNT関数の使い方について解説してきました。

COUNT関数、SUMなどの集計関数は、業務システム開発・ゲーム開発など、どのようなシステムであっても、非常に多くのシーンで利用される関数です。

SQLは、テーブルからデータを抽出するだけでなく、集計、累積などのデータ分析などが行える強力な言語ですので、是非覚えておきましょう。

【関連記事】
SQLで重複データをまとめる方法を確認しよう!【DISTINCT/GROUP BY】

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

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

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

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

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

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

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

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

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

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

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