MySQLですべての行の値をカンマ区切りの単一の行として表示する方法
GROUP_CONCAT()とCONCAT()を使って複数行の値を1行にまとめる方法
MySQLでテーブル内の複数の行に格納された値を、カンマ(コンマ)で区切られた単一の行として取得したい場合には、GROUP_CONCAT()関数とCONCAT()関数を組み合わせて使用します。GROUP_CONCAT()はグループ内の複数の値を連結して文字列として返し、CONCAT()を使うことで各値の前後に任意の文字を追加できます。
以下では、実際の手順をサンプルコードとともに順番に解説していきます。
1. サンプルテーブルを作成する
まず、テスト用のテーブルを作成します。ここではint型の「Id」カラムを持つシンプルなテーブルを定義します。
mysql> create table DemoTable1807
(
Id int
);
Query OK, 0 rows affected (0.00 sec)
2. テーブルにレコードを挿入する
次に、INSERT文を使ってサンプルデータを数件登録します。
mysql> insert into DemoTable1807 values(101);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1807 values(102);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1807 values(103);
Query OK, 1 row affected (0.00 sec)
3. 登録したレコードを確認する
SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable1807;
このクエリを実行すると、以下のような結果が得られます。
+------+
| Id |
+------+
| 101 |
| 102 |
| 103 |
+------+
3 rows in set (0.00 sec)
現時点では、値が3つの別々の行に分かれて格納されています。
4. 値をカンマ区切りの単一の行にまとめる
ここからが本題です。GROUP_CONCAT()とCONCAT()を組み合わせることで、各行の値を角括弧で囲み、カンマで連結した単一の文字列として取得できます。
mysql> select group_concat(concat('[',Id,']')) from DemoTable1807;実行結果は以下のとおりです。
+----------------------------------+
| group_concat(concat('[',Id,']')) |
+----------------------------------+
| [101],[102],[103] |
+----------------------------------+
1 row in set (0.00 sec)
ポイントの解説
- CONCAT('[',Id,']'):各Idの値を「[101]」のように角括弧で囲んだ文字列に変換します。
- GROUP_CONCAT():変換された複数の文字列を、デフォルトの区切り文字であるカンマ(,)で連結し、1つの行にまとめて返します。
なお、区切り文字を変更したい場合は、「SEPARATOR」句を使用できます。例えば「GROUP_CONCAT(... SEPARATOR '; ')」とすればセミコロン区切りに変更可能です。また、ORDER BY句を組み合わせれば、連結される値の並び順も制御できます。
このようにGROUP_CONCAT()を活用することで、集計結果やタグ一覧などをアプリケーション側で扱いやすい形式の文字列として簡単に取得できるため、実務でも非常によく使われるテクニックです。
-
MySQLでカンマ区切りのカラムから値を検索する方法【FIND_IN_SET関数】
MySQLでは、1つのカラムに「41,14,94」のようにカンマ区切りの複数の値が格納されていることがあります。このようなカラムから特定の値を検索したい場合は、FIND_IN_SET() 関数を使用するのが便利です。この記事では、実際にテーブルを作成し、FIND_IN_SET() を使ってカンマ区切りのデータを検索する手順を解説します。サンプルテーブルの作成まず、CREATE TABLE 文でテーブルを作成します。mysql> create table DemoTable -> ( -> Value varchar(20) -> ); Query
-
MySQLで列の値と任意のテキストを連結して1つの列に表示する方法
MySQLで列の値とテキストを連結する方法MySQLでは、CONCAT()関数を使用することで、テーブルの列の値と任意のテキストを連結し、結果を1つの列として表示できます。本記事では、サンプルテーブルを作成し、実際に文字列を連結して表示するまでの手順を具体例とともに解説します。1. テーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> );Query OK, 0 rows affected (0.93 sec)こ