MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでCOUNTを使ったSELECT文の実行方法を徹底解説

MySQLでSELECT文とCOUNTを組み合わせてデータ件数を集計したい場合は、集計関数であるCOUNT()を使用します。さらにGROUP BY句と組み合わせることで、グループごとのレコード数を簡単に取得できます。

この記事では、実際にテーブルを作成し、COUNT()を使った集計クエリの実行手順をサンプルコード付きで順を追って解説します。

1. サンプルテーブルを作成する

まずは、動作確認用のテーブルを作成しましょう。以下のSQLでは、Id・Name・Subjectの3つのカラムを持つ「DemoTable」を作成しています。

mysql> create table DemoTable
    (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name varchar(100),
    Subject varchar(100)
    );
Query OK, 0 rows affected (0.54 sec)

AUTO_INCREMENTを指定することで、Idカラムには自動的に連番が採番されます。

2. テーブルにレコードを挿入する

次に、INSERT文を使ってテストデータを登録します。ここでは、JohnとCarolという2人のユーザーが、それぞれ複数の科目(Subject)を受講しているというデータを用意しました。

mysql> insert into DemoTable(Name,Subject) values('John','MySQL');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(Name,Subject) values('John','Java');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(Name,Subject) values('Carol','MongoDB');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Name,Subject) values('Carol','Java');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(Name,Subject) values('Carol','MySQL');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(Name,Subject) values('John','MySQL');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable(Name,Subject) values('Carol','MongoDB');
Query OK, 1 row affected (0.26 sec)

合計7件のレコードが挿入されました。同じユーザーが同じ科目を複数回受講しているデータも含まれている点に注目してください。

3. テーブルの全レコードを確認する

SELECT文を使って、挿入したデータをすべて表示してみましょう。

mysql> select *from DemoTable;

出力結果

+----+-------+---------+
| Id | Name  | Subject |
+----+-------+---------+
| 1  | John  | MySQL   |
| 2  | John  | Java    |
| 3  | Carol | MongoDB |
| 4  | Carol | Java    |
| 5  | Carol | MySQL   |
| 6  | John  | MySQL   |
| 7  | Carol | MongoDB |
+----+-------+---------+
7 rows in set (0.00 sec)

7件のレコードが正しく登録されていることが確認できます。

4. COUNT()とGROUP BYで件数を集計する

ここからが本題です。COUNT()関数とGROUP BY句を組み合わせることで、「どのユーザーがどの科目を何回受講しているか」を一括して集計できます。

mysql> select Name,Subject,count(Subject) from DemoTable group by Subject,Name;

出力結果

+-------+---------+----------------+
| Name  | Subject | count(Subject) |
+-------+---------+----------------+
| John  | MySQL   | 2              |
| John  | Java    | 1              |
| Carol | MongoDB | 2              |
| Carol | Java    | 1              |
| Carol | MySQL   | 1              |
+-------+---------+----------------+
5 rows in set (0.00 sec)

クエリのポイント解説

  • count(Subject):Subjectカラムの値がNULLでない行の件数をカウントします。
  • group by Subject,Name:SubjectとNameの組み合わせごとにレコードをグループ化し、各グループの件数を算出します。

この結果から、例えば「JohnはMySQLを2回受講している」「CarolはMongoDBを2回受講している」ことがひと目でわかります。GROUP BY句に指定するカラムの順序や組み合わせを変えれば、さまざまな切り口での集計が可能です。

なお、単純にテーブル全体の総件数を取得したい場合は、GROUP BYを使わずselect count(*) from DemoTable;のように記述するだけでOKです。用途に応じて使い分けるとよいでしょう。

  1. MySQLで再帰的なSELECTクエリを実行する方法【初心者向けに具体例つきで解説】

    MySQLでは、ユーザー定義変数(セッション変数)を活用することで、再帰的なSELECTクエリを実現できます。本記事では、実際にテーブルを作成し、データを挿入したうえで、再帰的なSELECTの具体的な書き方を順を追って解説します。 1. サンプルテーブルの作成 まず、再帰的なSELECTを試すためのサンプルテーブルを作成します。テーブルの作成にはCREATEコマンドを使用します。 mysql> CREATE table tblSelectDemo - > ( - > id int, - > name varchar(100) - > );

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected