【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という最大長の制限があるため、大量のデータを連結する場合は事前に設定値を確認しておくと安心です。
-
MySQLでテーブルから特定の行を抽出するクエリの書き方
MySQLでは、WHERE句とORDER BY、LIMITを組み合わせることで、テーブルから条件に合致する特定の行だけを効率的に取得できます。本記事では、実際にサンプルテーブルを作成し、特定の行を抽出するクエリの実行手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。ここでは「Section(組)」と「StudentName(生徒名)」という2つのカラムを持つテーブルを用意しました。 mysql> create table DemoTable1972 ( Section char(1),
-
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コマンドを