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です。用途に応じて使い分けるとよいでしょう。
-
MySQLで再帰的なSELECTクエリを実行する方法【初心者向けに具体例つきで解説】
MySQLでは、ユーザー定義変数(セッション変数)を活用することで、再帰的なSELECTクエリを実現できます。本記事では、実際にテーブルを作成し、データを挿入したうえで、再帰的なSELECTの具体的な書き方を順を追って解説します。 1. サンプルテーブルの作成 まず、再帰的なSELECTを試すためのサンプルテーブルを作成します。テーブルの作成にはCREATEコマンドを使用します。 mysql> CREATE table tblSelectDemo - > ( - > id int, - > name varchar(100) - > );
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected