MySQLでCONCATとGROUP_CONCATを組み合わせて使う方法
MySQLでは、CONCAT関数とGROUP_CONCAT関数を組み合わせることで、グループごとの複数のカラム値を1つの文字列として連結することができます。本記事では、サンプルテーブルの作成から実際のクエリ実行まで、手順を追って詳しく解説します。
テーブルの作成
まずは、動作確認用のサンプルテーブルを作成します。
mysql> create table GroupConcatenateDemo -> ( -> id int, -> FirstName varchar(100), -> Score int -> ); Query OK, 0 rows affected (0.61 sec)
レコードの挿入
次に、作成したテーブルにいくつかのレコードを挿入していきます。
mysql> insert into GroupConcatenateDemo values(1,'John',94); Query OK, 1 row affected (0.16 sec) mysql> insert into GroupConcatenateDemo values(2,'Bob',98); Query OK, 1 row affected (0.16 sec) mysql> insert into GroupConcatenateDemo values(4,'Carol',100); Query OK, 1 row affected (0.20 sec)
テーブルに登録されているレコードを確認してみましょう。
mysql> select *from GroupConcatenateDemo;
実行結果は以下の通りです。
+------+-----------+-------+ | id | FirstName | Score | +------+-----------+-------+ | 1 | John | 94 | | 2 | Bob | 98 | | 3 | Carol | 100 | +------+-----------+-------+ 3 rows in set (0.00 sec)
CONCATとGROUP_CONCATを組み合わせた構文
GROUP_CONCATは、GROUP BYでグループ化された複数行の値を1つの文字列にまとめる集計関数です。一方、CONCATは複数の文字列やカラムを結合する関数です。この2つを組み合わせると、グループ内の複数カラムの値を自由な形式で連結できます。
基本的な構文は以下の通りです。
Select column_name1, group_concat(concat(`Column_name2`,'separatorValue',`Column_name3`) separator 'separatorValue') as AliasName from yourTableName group by column_name1;
- concat():連結したい複数のカラムと区切り文字を指定します。
- separator:GROUP_CONCATで各行の結果をつなぐ際の区切り文字を指定します。
実行例
それでは、実際にidごとに「名前:スコア」の形式で値を連結してみましょう。
mysql> SELECT -> id,group_concat(concat(`FirstName`,':',`score`) separator ',') -> as FirstNameAndScore from GroupConcatenateDemo group by id;
実行結果を見ると、各レコードが「FirstName:Score」の形式で正常に連結されていることが確認できます。
+------+-------------------+ | id | FirstNameAndScore | +------+-------------------+ | 1 | John:94 | | 2 | Bob:98 | | 3 | Carol:100 | +------+-------------------+ 3 rows in set (0.00 sec)
まとめ
このように、GROUP_CONCATの中でCONCATを使用することで、複数カラムの値を任意の区切り文字で整形しながら1つの文字列にまとめることができます。CSV形式の出力やレポート生成など、データを可読性の高い形で取得したい場面で非常に便利なテクニックなので、ぜひ活用してみてください。
-
MySQLでWITH ROLLUPを正しく使う方法!GROUP BYと組み合わせた集計テクニックを解説
WITH ROLLUPとは?MySQLのWITH ROLLUPは、GROUP BY句と組み合わせて使用することで、グループごとの集計結果に加えて、全体の合計(総計)行を自動的に追加してくれる便利な機能です。レポート作成やデータ分析の際に、別途合計用のクエリを実行する必要がなくなるため、非常に効率的です。基本構文WITH ROLLUPを使用する際の基本的な構文は以下の通りです。select yourColumnName1,sum(yourColumnName2) from yourTableNamegroup by yourColumnName1 with rollup;サンプルテーブルの作成ま
-
MySQLでCURDATE()とLIKE句を使った部分一致検索の方法
MySQLにはCONTAINS()という名前の関数は存在しません。そのため、現在の日付(CURDATE())に関連する文字列で部分一致検索を行いたい場合は、CONCAT()関数とLIKE句を組み合わせる方法が有効です。本記事では、実際にサンプルテーブルを作成しながら、その手順を順番に解説していきます。現在の日付を確認するまず、CURDATE()関数を使って現在の日付を取得してみましょう。mysql> select curdate();実行結果は以下の通りです。+------------+ | curdate() | +------------+ | 2019-11-28 | +----