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

MySQLでCOUNT(*)を使って単一の行のみを返す方法|GROUP BYとの組み合わせを解説

MySQLでCOUNT(*)を使用した際に複数行ではなく単一の行だけを返したい場合は、GROUP BY句と組み合わせて値をグループ化し、重複を排除した上で件数を表示する必要があります。

本記事では、実際にテーブルを作成しながら、その具体的な手順をわかりやすく解説します。

1. サンプルテーブルの作成

まず、以下のクエリでテーブルを作成します。

mysql> create table DemoTable (Value int);
Query OK, 0 rows affected (0.55 sec)

2. レコードの挿入

続いて、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。あえて同じ値を複数回登録している点に注目してください。

mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values(60);
Query OK, 1 row affected (0.25 sec)

3. テーブルの中身を確認

SELECTコマンドで登録されたレコードを表示してみましょう。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+-------+
| Value |
+-------+
|    10 |
|    20 |
|    10 |
|    30 |
|    10 |
|    20 |
|    40 |
|    10 |
|    20 |
|    20 |
|    60 |
+-------+
11 rows in set (0.00 sec)

4. 重複を排除した件数を単一行で取得する

それでは本題です。同じ値が並ぶ中から、一意な値(この例では10、20、30、40、60)の種類数をカウントして1行だけ返すには、以下のようなクエリを使用します。

mysql> SELECT COUNT(*) FROM (SELECT *FROM DemoTable GROUP BY Value) AS tbl;

ポイントはサブクエリの構造です。内側の「SELECT * FROM DemoTable GROUP BY Value」によってValueごとにレコードがグループ化され、一意な値ごとに1行ずつにまとめられます。その結果セットに対して外側でCOUNT(*)を適用することで、行数=一意な値の種類数が算出され、結果は必ず単一の行として返されます。

実行すると、以下の出力が得られます。

+----------+
| COUNT(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

まとめ

このように、GROUP BYでグループ化した結果をサブクエリとして包み、その外側でCOUNT(*)を実行することで、重複する値を排除した件数を単一の行として取得できます。DISTINCTを使った「SELECT COUNT(DISTINCT Value)」でも同様の結果が得られますが、サブクエリ方式はより複雑な集計条件にも柔軟に対応できるため、覚えておくと便利です。

  1. 【MySQL】1つのクエリで複数の行を取得する方法:LIKE演算子の活用

    はじめに1つのMySQLクエリで複数の行(レコード)を取得したい場合には、LIKE演算子を使用します。LIKE演算子によるパターンマッチングを活用すれば、条件に合致する複数の行を一度のクエリで効率的に抽出できます。ここでは、まずサンプル用のテーブルを作成しましょう。mysql> create table DemoTable1385 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(20) -> );Query OK, 0 rows affected (0.

  2. MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法

    はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実