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

MySQLで行をマージする方法!GROUP_CONCAT関数を使った行結合の実践テクニック

MySQLで行をマージするには?

MySQLで複数の行を1つにマージ(結合)したい場合は、GROUP_CONCAT() 関数を使用します。この関数を使うと、GROUP BYでグループ化した各行の値を、カンマなどの区切り文字で連結した1つの文字列として取得できます。

ここでは、実際にサンプルテーブルを作成しながら、行をマージする手順をわかりやすく解説します。

1. サンプルテーブルを作成する

まず、CREATE TABLE文でテーブルを作成しましょう。

mysql> create table DemoTable734 (
Id int,
Name varchar(100)
);
Query OK, 0 rows affected (0.73 sec)

2. テストデータを挿入する

次に、INSERTコマンドを使ってレコードを追加します。同じ名前を持つ複数の行を用意することで、マージの効果が確認しやすくなります。

mysql> insert into DemoTable734 values(101,'John');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable734 values(102,'John');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable734 values(103,'Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable734 values(104,'Chris');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable734 values(104,'Chris');
Query OK, 1 row affected (0.13 sec)

3. 挿入したデータを確認する

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

mysql> select *from DemoTable734;

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

+------+-------+
| Id | Name |
+------+-------+
| 101 | John |
| 102 | John |
| 103 | Chris |
| 104 | Chris |
| 104 | Chris |
+------+-------+
5 rows in set (0.00 sec)

4. GROUP_CONCAT()で行をマージする

いよいよ行をマージするクエリを実行します。Nameカラムでグループ化し、DISTINCTキーワードを組み合わせることで重複するIdを除外しながら結合できます。

mysql> select Name,group_concat(Distinct Id SEPARATOR ',') from DemoTable734 group by Name;

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

+-------+-----------------------------------------+
| Name | group_concat(Distinct Id SEPARATOR ',') |
+-------+-----------------------------------------+
| Chris | 103,104 |
| John | 101,102 |
+-------+-----------------------------------------+
2 rows in set (0.04 sec)

ポイントまとめ

  • GROUP_CONCAT():グループ内の複数行の値を1つの文字列に連結する集計関数です。
  • DISTINCT:重複する値を除外して結合したい場合に指定します。上記の例では、Chrisの「104」が2件ありましたが、結果では1つにまとめられています。
  • SEPARATOR:連結時の区切り文字を指定できます。デフォルトはカンマ(,)ですが、「SEPARATOR ' '」のようにスペースやその他の文字に変更することも可能です。

このように、GROUP BYとGROUP_CONCAT()を組み合わせることで、MySQLでも簡単に行をマージできます。名前ごとのID一覧を取得したい場合など、レポート作成やデータ整理の場面で非常に便利なテクニックなので、ぜひ活用してみてください。

  1. MySQLでアポストロフィ(')をエスケープする2つの方法

    MySQLでは、文字列に含まれるアポストロフィ(シングルクォート )をエスケープする必要がある場面がよくあります。例えば「Johns」のような名前をそのまま挿入しようとすると、構文エラーになってしまいます。 アポストロフィをエスケープするには、主に以下の2つの方法があります。 バックスラッシュ(\)を使用する シングルクォートを2つ重ねる() 準備:テーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table SingleQuotesDemo -> ( -> id int, -> name varchar

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected