MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで複数の行をカンマ区切りのリストに結合する方法(GROUP_CONCAT関数の使い方)

MySQLでは、GROUP_CONCAT() 関数を使うことで、複数の行を1つのカンマ区切りの文字列リストに結合できます。この記事では、実際にテーブルを作成し、データを登録したうえで、GROUP_CONCAT() の具体的な使い方を解説します。

1. サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。以下のコマンドを実行して、「DemoTable」というテーブルを定義します。

mysql> create table DemoTable
    (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name varchar(30),
    Marks int
    );
Query OK, 0 rows affected (0.52 sec)

テーブルには「Id」「Name(名前)」「Marks(点数)」の3つのカラムを持たせています。

2. テストデータの挿入

次に、INSERT文を使ってサンプルレコードを挿入します。

mysql> insert into DemoTable(Name,Marks) values('John',67);
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable(Name,Marks) values('Carol',69);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(Name,Marks) values('Sam',69);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(Name,Marks) values('David',78);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(Name,Marks) values('Chris',69);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(Name,Marks) values('Bob',67);
Query OK, 1 row affected (0.17 sec)

SELECT文で全レコードを確認してみましょう。

mysql> select *from DemoTable;

実行結果:

+----+-------+-------+
| Id | Name  | Marks |
+----+-------+-------+
| 1  | John  | 67    |
| 2  | Carol | 69    |
| 3  | Sam   | 69    |
| 4  | David | 78    |
| 5  | Chris | 69    |
| 6  | Bob   | 67    |
+----+-------+-------+
6 rows in set (0.00 sec)

3. GROUP_CONCAT()で行をカンマ区切りに結合する

それが本題のクエリです。同じ点数(Marks)ごとに名前をグループ化し、カンマ区切りのリストとして表示します。

mysql> SELECT Marks, GROUP_CONCAT(Name ORDER BY Name ASC SEPARATOR ', ')
   from DemoTable GROUP BY Marks;

実行結果:

+-------+-----------------------------------------------------+
| Marks | GROUP_CONCAT(Name ORDER BY Name ASC SEPARATOR ', ') |
+-------+-----------------------------------------------------+
| 67    | Bob, John                                           |
| 69    | Carol, Chris, Sam                                   |
| 78    | David                                               |
+-------+-----------------------------------------------------+
3 rows in set (0.00 sec)

4. クエリのポイント解説

このクエリのポイントは以下の通りです。

  • GROUP BY Marks: 点数が同じ行を1つのグループにまとめます。
  • ORDER BY Name ASC: 結合する名前をアルファベット順(昇順)にソートします。
  • SEPARATOR ', ': 区切り文字として「, (カンマ+半角スペース)」を指定します。デフォルトは「,」ですが、SEPARATOR句を使えば任意の区切り文字に変更できます。

まとめ

MySQLで複数行の値を1つのカンマ区切りリストに変換したい場合は、GROUP_CONCAT() 関数が非常に便利です。GROUP BYと組み合わせれば、カテゴリ別や点数別など、任意の単位で値を集約して表示できます。区切り文字や並び順も自由に指定できるため、レポート出力やCSV形式のデータ生成などにも幅広く活用できるでしょう。

  1. MySQLのGROUP_CONCATで複数行の値を1つのフィールドにまとめてリストとして取得する方法

    はじめにMySQLでは、複数の行に分かれている値を1つのフィールドに連結したリストとして取得したい場面がよくあります。たとえば、科目ごとに受講している学生名をカンマ区切りでまとめて表示したい場合などです。このような場合は、集約関数のGROUP_CONCAT()を使用することで簡単に実現できます。本記事では、実際にテーブルを作成し、サンプルデータを使いながらGROUP_CONCAT()の使い方を順を追って解説します。サンプルテーブルの作成まず、科目名(SubjectName)と学生名(StudentName)を持つテーブルを作成します。mysql> create table DemoTab

  2. MySQLで複数のLIKE演算子をORDER BYと組み合わせる方法

    MySQLでは、複数のLIKE演算子をORDER BY句の中で組み合わせることで、指定したキーワードにより多く一致するレコードを優先的に並べ替えることができます。このテクニックは、LIKE演算子が「一致すれば1」「一致しなければ0」を返すという性質を利用しています。各条件の結果を足し合わせることで一致数を計算し、降順(DESC)にソートすることで、関連度の高いレコードを上位に表示できるのです。以下は、複数のLIKE演算子をORDER BYと組み合わせて実装する際の基本構文です。select *from yourTableName order by ( yourColumnName li