MySQLのGROUP BYでグループごとにすべての行を一覧表示する方法
MySQLのGROUP BYでグループごとにすべての行を一覧表示する方法
MySQLでグループごとにすべての行の値を一覧表示したい場合は、GROUP_CONCAT()関数を使用するのが効果的です。GROUP_CONCAT()は、GROUP BYでグループ化された各行の値を1つの文字列に連結して返してくれる便利な集計関数です。
まずは、動作を確認するためのサンプルテーブルを作成しましょう。
mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Value varchar(100) ); Query OK, 0 rows affected (0.62 sec)
続いて、insertコマンドを使ってテーブルにレコードを挿入していきます。
mysql> insert into DemoTable(Name,Value) values('John','John');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Name,Value) values('Carol','Carol');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(Name,Value) values('John','Works');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Name,Value) values('Carol','Works');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(Name,Value) values('John','At');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Name,Value) values('Carol','At');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(Name,Value) values('John','Amazon');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Name,Value) values('Carol','Google');
Query OK, 1 row affected (0.16 sec)
selectステートメントを実行して、テーブル内のすべてのレコードを確認してみましょう。
mysql> select *from DemoTable;
上記のクエリを実行すると、次のような出力が得られます。
+----+-------+--------+ | Id | Name | Value | +----+-------+--------+ | 1 | John | John | | 2 | Carol | Carol | | 3 | John | Works | | 4 | Carol | Works | | 5 | John | At | | 6 | Carol | At | | 7 | John | Amazon | | 8 | Carol | Google | +----+-------+--------+ 8 rows in set (0.00 sec)
それでは、グループごとにすべての行を一覧表示するためのクエリを見ていきましょう。この例では、「John」に紐づく値(id 1、3、5、7のレコード)が連結され、「John Works At Amazon」という1つの文字列として取得されます。同様に「Carol」についても同じように処理されます。
mysql> select Name, GROUP_CONCAT(Value SEPARATOR ' ') AS `Complete_Status` from DemoTable group by Name;
実行結果は次のとおりです。
+-------+-----------------------+ | Name | Complete_Status | +-------+-----------------------+ | Carol | Carol Works At Google | | John | John Works At Amazon | +-------+-----------------------+ 2 rows in set (0.00 sec)
ポイント解説
SEPARATOR句を指定することで、連結時の区切り文字を自由に変更できます。デフォルトはカンマ(,)ですが、上記の例では半角スペース(' ')を指定しています。さらに、GROUP_CONCAT()の中でORDER BY句を使えば、連結される値の並び順も制御できるので、用途に応じて柔軟に活用してみてください。
-
動的配列を活用したMySQLのLIKEクエリ実装方法を解説
動的配列に対するLIKEクエリの基本構文 MySQLでカンマ区切りの複数値(いわゆる動的な配列)が格納されたカラムに対してLIKEクエリを実行したい場合、LIKE句とワイルドカード「%」を組み合わせることで部分一致検索が可能です。基本となる構文は以下の通りです。 select *from yourTableName where yourColumnName2 like %yourValue% order by yourColumnName1 asc l
-
MySQLで同じIDの行を合計する方法:GROUP BYとHAVING句の使い方
MySQLで同じIDを持つ複数の行の値を合計したい場合、「GROUP BY」句と「HAVING」句を組み合わせて使用します。この記事では、テーブルの作成からクエリの実行まで、手順を追ってわかりやすく解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成しましょう。ここでは「id」と「price」という2つのカラムを持つシンプルなテーブルを用意します。 例 mysql> create table demo84 -> ( -> id int, -> price int -> ) -> ; Query OK,