MySQLの単一クエリで複数行をカンマ区切りのリストにまとめる方法
GROUP_CONCAT()関数を使った行の結合
MySQLで複数の行を1つのカンマ区切りのリストにまとめるには、GROUP_CONCAT()関数を使用します。この記事では、実際にテーブルを作成し、サンプルデータを挿入して、GROUP_CONCAT()の使い方を具体的に解説します。
1. サンプルテーブルの作成
まず、以下のようにテーブルを作成します。
mysql> create table DemoTable
(
Id int,
Name varchar(40)
);
Query OK, 0 rows affected (0.52 sec)
2. レコードの挿入
次に、INSERT文でいくつかのレコードを挿入します。
mysql> insert into DemoTable values(100,'Chris Brown');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(101,'Adam Smith');
Query OK, 1 row affected (0.84 sec)
mysql> insert into DemoTable values(101,'John Doe');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(100,'David Miller');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(101,'Carol Taylor');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values(103,'Bob Taylor');
Query OK, 1 row affected (0.20 sec)
3. テーブルの内容を確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下のとおりです。
+------+--------------+
| Id | Name |
+------+--------------+
| 100 | Chris Brown |
| 101 | Adam Smith |
| 101 | John Doe |
| 100 | David Miller |
| 101 | Carol Taylor |
| 103 | Bob Taylor |
+------+--------------+
6 rows in set (0.00 sec)
同じIdを持つ複数の行が存在していることが確認できます。
4. GROUP_CONCAT()で行をカンマ区切りのリストにまとめる
以下のクエリを実行すると、Idごとに行をグループ化し、Nameの値をカンマ区切りの1つの文字列にまとめられます。
mysql> select Id,group_concat(Name) from DemoTable group by Id;
実行結果は以下のとおりです。
+------+----------------------------------+
| Id | group_concat(Name) |
+------+----------------------------------+
| 100 | Chris Brown,David Miller |
| 101 | Adam Smith,John Doe,Carol Taylor |
| 103 | Bob Taylor |
+------+----------------------------------+
3 rows in set (0.00 sec)
このように、GROUP_CONCAT()を使うことで、GROUP BYでグループ化した各行の値を、簡単にカンマ区切りのリストとして取得できます。なお、区切り文字を変更したい場合は「GROUP_CONCAT(Name SEPARATOR ';')」のようにSEPARATOR句を指定することも可能です。
-
JavaでMySQLテーブルに1つのカラムのみを挿入する方法
JavaとMySQLを連携させる際、テーブルの一部のカラムだけにデータを挿入したいケースはよくあります。その場合は、JDBCのINSERT INTOステートメントを使用します。挿入対象のカラム名を明示的に指定することで、他のカラムには影響を与えずに1つのカラムのみへ値を登録できます。この記事では、実際にテーブルを作成し、Javaのコードから「Name」という1つのカラムだけにデータを挿入する手順を解説します。1. 挿入先のテーブルを作成するまず、MySQLで以下のようにテーブルを作成しておきましょう。ここでは、varchar型の「Name」カラムを1つだけ持つシンプルなテーブルを用意します。m
-
MySQLのGROUP_CONCATで複数行の値を1つのフィールドにまとめてリストとして取得する方法
はじめにMySQLでは、複数の行に分かれている値を1つのフィールドに連結したリストとして取得したい場面がよくあります。たとえば、科目ごとに受講している学生名をカンマ区切りでまとめて表示したい場合などです。このような場合は、集約関数のGROUP_CONCAT()を使用することで簡単に実現できます。本記事では、実際にテーブルを作成し、サンプルデータを使いながらGROUP_CONCAT()の使い方を順を追って解説します。サンプルテーブルの作成まず、科目名(SubjectName)と学生名(StudentName)を持つテーブルを作成します。mysql> create table DemoTab