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

【MySQL】共通のIDに基づいて各行の値を1つに連結する方法(GROUP_CONCATの使い方)

MySQLでは、GROUP_CONCAT()関数を使うことで、共通するIDを持つ複数行の値を1つの文字列にまとめて取得できます。本記事では、実際にテーブルを作成し、データを挿入してから、同じStudentIdを持つ行の名前を連結して表示するクエリを解説します。

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

まず、学生情報を格納するテーブルを作成します。

mysql> create table DemoTable
(
    StudentId int,
    StudentFirstName varchar(100),
    StudentLastName varchar(100)
);
Query OK, 0 rows affected (0.54 sec)

2. テストデータの挿入

次に、INSERT文を使ってレコードを挿入します。ここでは、同じStudentId「1000」を持つ3件のデータを登録します。

mysql> insert into DemoTable values(1000,'Adam','Smith');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(1000,'John','Doe');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(1000,'David','Miller');
Query OK, 1 row affected (0.12 sec)

3. 登録したレコードの確認

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

mysql> select *from DemoTable;

実行結果は以下の通りです。

+-----------+------------------+-----------------+
| StudentId | StudentFirstName | StudentLastName |
+-----------+------------------+-----------------+
|      1000 | Adam             | Smith           |
|      1000 | John             | Doe             |
|      1000 | David            | Miller          |
+-----------+------------------+-----------------+
3 rows in set (0.00 sec)

4. GROUP_CONCATで値を連結するクエリ

共通の一致するIDに基づいて各行のすべての値を連結するには、GROUP BYと組み合わせてgroup_concat()を使用します。

mysql> select StudentId,group_concat(StudentFirstName),group_concat(StudentLastName) from DemoTable group by StudentId;

実行結果は以下の通りです。同じStudentIdごとに、姓と名がそれぞれカンマ区切りで連結されていることがわかります。

+-----------+--------------------------------+-------------------------------+
| StudentId | group_concat(StudentFirstName) | group_concat(StudentLastName) |
+-----------+--------------------------------+-------------------------------+
|      1000 | Adam,John,David                | Smith,Doe,Miller              |
+-----------+--------------------------------+-------------------------------+
1 row in set (0.00 sec)

5. 補足:区切り文字や並び順を指定する

GROUP_CONCAT()はデフォルトでカンマ(,)区切りですが、SEPARATOR句を使えば任意の区切り文字を指定できます。また、ORDER BYを組み合わせると連結順序も制御可能です。

SELECT StudentId,
       GROUP_CONCAT(StudentFirstName ORDER BY StudentFirstName SEPARATOR ' / ') AS FirstNames
FROM DemoTable
GROUP BY StudentId;

このように書くことで、「Adam / David / John」のようにアルファベット順かつスラッシュ区切りで出力されます。大量データを扱う場合は、group_concat_max_lenシステム変数の上限値にも注意してください。

  1. MySQLですべての行の値をカンマ区切りの単一の行として表示する方法

    GROUP_CONCAT()とCONCAT()を使って複数行の値を1行にまとめる方法MySQLでテーブル内の複数の行に格納された値を、カンマ(コンマ)で区切られた単一の行として取得したい場合には、GROUP_CONCAT()関数とCONCAT()関数を組み合わせて使用します。GROUP_CONCAT()はグループ内の複数の値を連結して文字列として返し、CONCAT()を使うことで各値の前後に任意の文字を追加できます。以下では、実際の手順をサンプルコードとともに順番に解説していきます。1. サンプルテーブルを作成するまず、テスト用のテーブルを作成します。ここではint型の「Id」カラムを持つシン

  2. MySQLで2つの列のすべての値をカウントし、NULL値を除外する方法

    MySQLでは、COUNT関数を組み合わせることで、複数の列に含まれるすべての値をカウントできます。COUNT関数はNULL値を自動的に除外するため、NULLが混在するデータでも正確な合計件数を取得できるのが特徴です。ここでは、2つの列の値をカウントし、NULL値を除外した合計カウントを求める方法を具体的な例で解説します。 1. サンプルテーブルの作成 まず、学生名と点数を格納するテーブルを作成します。 mysql> create table DemoTable1975     (     StudentNa