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)」でも同様の結果が得られますが、サブクエリ方式はより複雑な集計条件にも柔軟に対応できるため、覚えておくと便利です。
-
【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.
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実