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

【MySQL】GROUP_CONCAT()で全行の値をカンマ区切りで1行にまとめて表示する方法

MySQLで複数の行に分かれている値を、カンマ区切りで1行にまとめて表示したい場合には、GROUP_CONCAT() 関数を使用します。GROUP BY句を組み合わせる必要はなく、GROUP_CONCAT()単体でもシンプルかつ高速に処理できるのが特徴です。

サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable1371
    -> (
    -> Id int,
    -> CountryName varchar(40)
    -> );
Query OK, 0 rows affected (0.89 sec)

テストデータの挿入

次に、INSERT文を使っていくつかのレコードを登録します。

mysql> insert into DemoTable1371 values(100,'US');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1371 values(100,'UK');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1371 values(101,'AUS');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable1371 values(101,'Angola');
Query OK, 1 row affected (0.14 sec)

登録データの確認

SELECT文でテーブル内の全レコードを表示してみます。

mysql> select * from DemoTable1371;

実行すると、以下のような結果が得られます。

+------+-------------+
| Id   | CountryName |
+------+-------------+
|  100 | US          |
|  100 | UK          |
|  101 | AUS         |
|  101 | Angola      |
+------+-------------+
4 rows in set (0.00 sec)

GROUP_CONCAT()で値をカンマ区切りに連結する

それでは、全行の値を取得してカンマで区切り、1行として表示するクエリを見てみましょう。

mysql> select group_concat(CountryName separator ',') from DemoTable1371;

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

+-----------------------------------------+
| group_concat(CountryName separator ',') |
+-----------------------------------------+
| US,UK,AUS,Angola                        |
+-----------------------------------------+
1 row in set (0.00 sec)

このように、4行に分かれていた国名が「US,UK,AUS,Angola」という1つの文字列にまとめられました。

補足:GROUP_CONCAT()の便利な使い方

  • 区切り文字の変更:「separator」の後に任意の文字列を指定できます(例:separator ';' や separator '/')。
  • 並び順の指定:「group_concat(CountryName order by CountryName separator ',')」のように書くと、連結される値をソートできます。
  • 重複の除外:DISTINCTを付けて「group_concat(distinct CountryName)」とすれば、重複した値を除いて連結できます。

なお、GROUP_CONCAT()にはgroup_concat_max_lenという最大長の制限があるため、大量のデータを連結する場合は事前に設定値を確認しておくと安心です。

  1. MySQLでテーブルから特定の行を抽出するクエリの書き方

    MySQLでは、WHERE句とORDER BY、LIMITを組み合わせることで、テーブルから条件に合致する特定の行だけを効率的に取得できます。本記事では、実際にサンプルテーブルを作成し、特定の行を抽出するクエリの実行手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。ここでは「Section(組)」と「StudentName(生徒名)」という2つのカラムを持つテーブルを用意しました。 mysql> create table DemoTable1972 ( Section char(1),

  2. MySQLで重複行を除外して1行だけ取得する方法(DISTINCTの使い方)

    MySQLで重複行から1行のみを返すには?MySQLのテーブルに同じ値を持つ重複行が存在する場合、DISTINCTキーワードを使うことで、重複を排除した一意な行だけを取得できます。この記事では、実際にテーブルを作成し、データを挿入したうえで、DISTINCTによる重複除去の手順を解説します。1. テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create table DemoTable1998 ( Name varchar(20) ); Query OK, 0 rows affected (0.61 sec)2. レコードを挿入するINSERTコマンドを