MySQLで列のデータをコンマ区切りのリストとして表示するには?(GROUP_CONCATの使い方)
GROUP_CONCAT()関数を使ったコンマ区切り表示の基本
MySQLでは、GROUP_CONCAT() 関数を使用することで、複数行に分かれた列の値を1つの行にまとめ、コンマ区切りのリスト形式で表示できます。レポート作成やデータのエクスポートなど、値を一括して文字列として扱いたい場面で非常に便利です。
ここからは、実際にサンプルテーブルを作成し、GROUP_CONCAT()の使い方を順を追って解説します。
1. サンプルテーブルを作成する
まず、以下のSQL文で「DemoTable」という名前のテーブルを作成します。
mysql> create table DemoTable
(
Value int
);
Query OK, 0 rows affected (0.26 sec)
2. テストデータを挿入する
次に、INSERTコマンドを使っていくつかのレコードを追加します。
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values(50);
Query OK, 1 row affected (0.07 sec)
3. 挿入したデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下のとおりです。現時点では各値が個別の行として表示されています。
+-------+
| Value |
+-------+
| 10 |
| 20 |
| 30 |
| 40 |
| 50 |
+-------+
5 rows in set (0.00 sec)
4. GROUP_CONCAT()でコンマ区切りに変換する
いよいよ本題です。以下のクエリを実行すると、列の値がコンマで連結された1つの文字列として取得できます。
mysql> SELECT GROUP_CONCAT(Value) FROM DemoTable;
実行結果:
+---------------------+
| GROUP_CONCAT(Value) |
+---------------------+
| 10,20,30,40,50 |
+---------------------+
1 row in set (0.00 sec)
覚えておくと便利な応用テクニック
GROUP_CONCAT()には、出力形式をカスタマイズできる便利なオプションが用意されています。
- 区切り文字を変更する:
GROUP_CONCAT(Value SEPARATOR ';')のように指定すれば、コンマ以外のセミコロンなど任意の区切り文字を使用できます。 - 並び順を指定する:
GROUP_CONCAT(Value ORDER BY Value DESC)と書くことで、降順などのソート順を制御できます。 - DISTINCTで重複を除去:
GROUP_CONCAT(DISTINCT Value)を使えば、重複する値を除外して表示できます。
なお、GROUP_CONCAT()の結果にはデフォルトで最大長(group_concat_max_len、初期値1024バイト)の制限があるため、大量のデータを連結する場合はサーバー変数の設定確認をおすすめします。
-
MySQLで特定のカラムのデータをエクスポートする方法(INTO OUTFILEの使い方)
MySQLで特定のカラムのデータをエクスポートする方法 MySQLでテーブルから特定のカラム(列)のデータだけをファイルに書き出したい場合は、SELECT文とINTO OUTFILEを組み合わせるのが最もシンプルで確実な方法です。この記事では、実際にテーブルを作成し、データを投入したうえで、特定のカラムをテキストファイルへエクスポートする手順を順番に解説します。 基本構文 特定のカラムをファイルに出力する際の基本構文は次のとおりです。 select yourColumnName from yourTableName into outfile yourLocationOfFile; このように
-
MySQLで予約語「from」を列名として使用する方法
MySQLで「from」を列名として使うには? MySQLでは「from」は予約語(リザーブドワード)として登録されているため、そのまま列名として使用するとエラーが発生します。しかし、バッククォート(`` ` ``)で囲むことで、予約語である「from」を列名として扱うことができます。 この記事では、実際にテーブルを作成し、「from」を列名としてデータの挿入や取得を行う手順を解説します。 1. バッククォートを使ってテーブルを作成する まず、列名「from」をバッククォートで囲んでテーブルを作成します。以下のSQLを実行してください。 mysql> create table Demo