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

MySQLのCOUNTとは?

MySQLで使われるCOUNT関数とは、引指定したフィールド(カラム)の行数を取得(カウント)する機能です。

MySQLの操作でも頻繁に使用されるため、覚えておくのは必須と言えるでしょう。

この記事では、そんなCOUNT関数の使い方について解説します。

COUNT関数のさまざまな使い方

ここではCOUNT関数について、次の5通りの記述方法・使い方を紹介します。

  1. COUNT関数の基本的な使い方
  2. DISTINCTで重複するデータを除外してCOUNTする
  3. COUNT関数でWHERE句を使う方法
  4. GROUP BYでグループ化したデータをCOUNTする
  5. COUNT関数でif文を使う方法

ひとつずつ解説していきますね。

1.COUNT関数の基本的な使い方

COUNT関数を使うには、次のように記述します。

COUNT(expr)

COUNT関数の引数に取得したいデータを記述すればOKです。

では、具体的な使い方をテーブルを作成してみていきましょう。

まずは「name」「type」「value」の3つのフィールドがあるテーブル「counttb」を作成します。

mysql> CREATE TABLE counttb (name VARCHAR(10), type VARCHAR(10), value INT);

テーブルを作成したらレコードを挿入します。

ここでは、次のようなレコードを挿入しました。

mysql> INSERT INTO counttb VALUES ('Potepan1', 'Type1', 55), ('Potepan2', 'Type3', 80);
mysql> INSERT INTO counttb VALUES ('Potepan3', 'Type1', 99), ('Potepan4', 'Type3', 60);
mysql> INSERT INTO counttb VALUES ('Potepan5', 'Type3', 77), ('Potepan6', 'Type2', 43);
mysql> INSERT INTO counttb VALUES ('Potepan7', NULL, 77), (NULL, 'Type2', NULL);
mysql> SELECT * FROM counttb;
+----------+-------+-------+
| name     | type  | value |
+----------+-------+-------+
| Potepan1 | Type1 |    55 |
| Potepan2 | Type3 |    80 |
| Potepan3 | Type1 |    99 |
| Potepan4 | Type3 |    60 |
| Potepan5 | Type3 |    77 |
| Potepan6 | Type2 |    43 |
| Potepan7 | NULL  |    77 |
| NULL     | Type2 |  NULL |
+----------+-------+-------+
8 rows in set (0.00 sec)

作成したデータをCOUNT関数で取得してみましょう。

mysql> SELECT COUNT(*) FROM counttb;
+----------+
| COUNT(*) |
+----------+
|        8 |
+----------+
1 row in set (0.01 sec)

挿入したデータ8個が取得できているのがわかります。

ポテパンダの一言メモ

「COUNT」と「(*)」 の間にスペースを空けると、エラーが発生してしまうので注意しましょう。

mysql> SELECT COUNT (*) FROM counttb;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) FROM counttb' at line 1

COUNT関数は、次のようにフィールドごとに取得することも可能です。

mysql> SELECT COUNT(name), COUNT(type), COUNT(value) FROM counttb;
+-------------+-------------+--------------+
| COUNT(name) | COUNT(type) | COUNT(value) |
+-------------+-------------+--------------+
|           7 |           7 |            7 |
+-------------+-------------+--------------+
1 row in set (0.00 sec)

NULLはCOUNTされないため、取得されているのは7個になっているのがわかります。

2.DISTINCTで重複するデータを除外してCOUNTする

DISTINCTとは、重複するデータを除外してまとめた結果を出力できる構文です。

DISTINCTはCOUNT関数で次のように記述します。

COUNT(DISTINCT expr)

では、先ほど作成したテーブルをDISTINCTを使ってCOUNTしてみましょう。

mysql> SELECT COUNT(DISTINCT name), COUNT(DISTINCT type), COUNT(DISTINCT value) FROM counttb;
+----------------------+----------------------+-----------------------+
| COUNT(DISTINCT name) | COUNT(DISTINCT type) | COUNT(DISTINCT value) |
+----------------------+----------------------+-----------------------+
|                    7 |                    3 |                     6 |
+----------------------+----------------------+-----------------------+
1 row in set (0.01 sec)

このように、typeで重複していたデータはひとつにまとめられ、3種類存在することが確認できました。

valueも「77」が重複しているため「6」が出力されているのがわかります。

一方、nameには重複がないためDISTINCTを使用していない場合と同じ値が出力されました。

3.COUNT関数でWHERE句を使う方法

COUNT関数でWHERE句を使うと、フィールドの指定した値だけをCOUNTして取得可能になります。

WHERE句の基本的な使い方を知りたい方は、次の記事を参考にしてみるとよいでしょう。

【関連記事】

▶︎SQL where句のサンプルコード集 ワイルドカードやサブクエリを使った複雑な条件指定

ここでは、「Type2」をCOUNT関数とWHERE句で取得してみます。

mysql> SELECT COUNT(*) FROM counttb WHERE type = 'Type2';
+----------+
| COUNT(*) |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)

このように、特定のレコードをCOUNTしたい場合はWHERE句を使いましょう。

4.GROUP BYでグループ化したデータをCOUNTする

例えば、「Type1のデータはいくつあるんだろう」と思った時に、テーブルに格納されているレコードが少ないうちは目視で数えてもよいですが、数が増えてきたら目視で確認は難しいですよね。

そんな時は、GROUP BY句でグループごとに分類してCOUNTします。

COUNT関数を使うには、次のように記述します。

SELECT フィールド名, COUNT FROM テーブル名 GROUP BY フィールド名;

GROUP BY句の後のフィールド名は何個指定してもOKです。

ここでは、counttbテーブルのtypeフィールドをグループ化してCOUNTしてみましょう。

なお、レコード数は一番はじめから少し増やしてあります。

mysql> SELECT type, COUNT(*) FROM counttb GROUP BY type;
+-------+----------+
| type  | COUNT(*) |
+-------+----------+
| Type1 |        3 |
| Type3 |        5 |
| Type2 |        3 |
| NULL  |        1 |
+-------+----------+
4 rows in set (0.00 sec)

typeフィールドに含まれる値ごとにデータの数が取得できました。

5.COUNT関数でif文を使う方法

COUNT関数内でif文を使った条件分岐を行うことも可能です。

COUNT(IF(条件式, フィールド名, NULL))

サンプルでvalueが60以上のレコードの行数を取り出してみましょう。

mysql> SELECT * FROM counttb;
+-----------+-------+-------+
| name      | type  | value |
+-----------+-------+-------+
| Potepan1  | Type1 |    55 |
| Potepan2  | Type3 |    80 |
| Potepan3  | Type1 |    99 |
| Potepan4  | Type3 |    60 |
| Potepan5  | Type3 |    77 |
| Potepan6  | Type2 |    43 |
| Potepan7  | NULL  |    77 |
| NULL      | Type2 |  NULL |
| Potepan8  | Type3 |    44 |
| Potepan9  | Type1 |    61 |
| Potepan10 | Type3 |    57 |
| Potepan11 | Type2 |    37 |
+-----------+-------+-------+
12 rows in set (0.00 sec)

mysql> SELECT COUNT(IF(value>=60, value, NULL)) FROM counttb;
+-----------------------------------+
| COUNT(IF(value>=60, value, NULL)) |
+-----------------------------------+
| 6                    |
+-----------------------------------+
1 row in set (0.00 sec)

なお、if文を使わず次のような記述でも同じ動作を実現可能です。

mysql> SELECT COUNT(value>=60 OR NULL) FROM counttb;
+--------------------------+
| COUNT(value>=60 OR NULL) |
+--------------------------+
|                        6 |
+--------------------------+
1 row in set (0.00 sec)

まとめ

MySQLのCOUNT関数の使い方を解説しました。

COUNT関数は複数で使うことも可能で、テーブル内のレコードを効率よく取得できる構文です。

ぜひ使いこなして、MySQLをマスターしてください!

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

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

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

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

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

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

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

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

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

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

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