MySQLでテーブルのデータ件数を数える方法!(COUNT関数)

MySQL MySQL

MySQLでテーブルのデータ件数を数える方法について書いています。
データの件数を数えるときにはCOUNT関数を使うと良いです。

MySQLのバージョン8.0.32で、動作を検証しています。
公式ドキュメントのこちらの記事にも行のカウントについて記載があります。

COUNT関数の使い方

COUNT関数を使うと、テーブルのデータ件数を数えることができます。
例えば、usersというテーブルに下記のようにデータが入っています。

id name age birthday
1 jiro 23 2000-01-01
2 taro 25 1998-01-01
3 hanako 26 1997-01-01
4 jiro 32 1991-01-01
5 taro 30 1993-01-01
6 taro 28 1995-01-01

このときに、下記のSQLを実行することで、データの件数を数えることができます。

SELECT COUNT(*) FROM users;

実際に実行すると、このように全ての件数の6件が表示されました。

mysql> SELECT COUNT(*) FROM users;
+----------+
| COUNT(*) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)

COUNT関数に条件をつける

WHEREで条件をつけてカウントすることができます。
また、COUNT関数に対して、条件を入れることができます。

WHEREでSELECTに条件をつける

SELECTでCOUNTを使ったときに、WHEREに条件を指定して、カウントすることもできます。

SELECT COUNT(*) FROM users WHERE age >= 30;

WHEREで年齢(age)が30歳以上を指定しています。
これで、年齢(age)が30歳以上のレコードの件数を数えることができます。

実行すると、下記のように2件取得できました。

mysql> SELECT COUNT(*) FROM users WHERE age >= 30;
+----------+
| COUNT(*) |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)

COUNT関数に条件を入れる

COUNT関数に条件を指定することもできます。
それぞれのカラムに条件を指定して、件数を数えることが可能です。

SELECT COUNT(name = 'taro' or null), COUNT(age < 26 or null) FROM users;

名前(name)がtaroのデータをカウントしています。
また、年齢(age)が26歳未満の人をカウントしています。

COUNT関数に、このように指定することができます。
name = 'taro'」で名前(name)がtaroの人のデータ、「age < 26」で年齢(age)が26歳未満のデータをカウントしています。

それぞれに「or null」をつけています。
これはCOUNT関数が、NULLじゃないときだけカウントするためです。

name = 'taro'」で値があったら「1」、なかったら「0」が返ってきます。
or null」をつけることで、「0」じゃなくて「NULL」を返してくれるので、COUNT関数カウントしなくなります。

実行してみると、下記のように、それぞれ条件に合うのカラムのカウントが取得できました。

mysql> SELECT COUNT(name = 'taro' or null), COUNT(age < 26 or null) FROM users;
+------------------------------+-------------------------+
| COUNT(name = 'taro' or null) | COUNT(age < 26 or null) |
+------------------------------+-------------------------+
|                            3 |                       2 |
+------------------------------+-------------------------+
1 row in set (0.00 sec)

COUNT関数とDISTINCTを合わせて使う

COUNT関数とDISTINCTを合わせて使うこともできます。
DISTINCTを使うと、同じ値のものは「1」と数えられるので、重複しない値をカウントできます。

SELECT COUNT(DISTINCT name) FROM users;

名前(name)カラムの重複しないデータ数をカウントしてみました。
usersテーブルは最初に書いたように、taroという名前のデータが3つで、jiroという名前も2つあり重複しています。

それぞれが「1」と数えられます。
実際に実行してみると、下記のように重複しない数が取得できました。

mysql> SELECT COUNT(DISTINCT name) FROM users;
+----------------------+
| COUNT(DISTINCT name) |
+----------------------+
|                    3 |
+----------------------+
1 row in set (0.00 sec)

taroが「1」・jiroが「1」で、hanakoがもともと1レコード入っているので、合計で「3」です。

MySQLでテーブルのデータ件数を数える方法まとめ

今回はMySQLでCOUNT関数を使って、テーブルのデータ件数を数える方法を書きました。
記事の内容をまとめると、下記のようになります。

・COUNT関数を使うと、レコード件数を数えることができる。
・WHEREでSELECTに条件をつけると、条件で取得できたレコード数がカウントできる。
・COUNT関数に条件を入れてカウントすることができた。(or nullが必要)
・DISTINCTを指定して、COUNT関数を使うと、重複しないデータ数が取得できた。

コメント

タイトルとURLをコピーしました