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関数を使って、テーブルのデータ件数を数える方法を書きました。
記事の内容をまとめると、下記のようになります。
・WHEREでSELECTに条件をつけると、条件で取得できたレコード数がカウントできる。
・COUNT関数に条件を入れてカウントすることができた。(or nullが必要)
・DISTINCTを指定して、COUNT関数を使うと、重複しないデータ数が取得できた。
コメント