MySQL の CONCAT で GROUP_CONCAT を使用する方法
特定のシナリオでは、MySQL テーブルに格納されているデータを変換する必要が生じる場合があります。特定の形式に変換します。たとえば、次のようなデータを含むテーブルがあるとします。
id | Name | Value |
---|---|---|
1 | A | 4 |
1 | A | 5 |
1 | B | 8 |
2 | C | 9 |
目標は、次の結果を取得することです。
id | Column |
---|---|
1 | A:4,5,B:8 |
2 | C:9 |
この変換を実現するには、以下を行う必要があります。 GROUP_CONCAT() 関数を利用します。この関数は、特定の条件でグループ化された複数の行の値を連結できる点で際立っています。
まず、ID と名前の両方でグループ化された値を連結するサブクエリを生成する必要があります。次のコード スニペットは、この手順を示しています。
select id, concat(`Name`, ':', group_concat(`Value` separator ',')) as Name from mytbl group by id, Name
結果のサブクエリは、ID と Name の両方でグループ化され、コロンとカンマで連結されたすべての値を含む Name という新しい列を作成します。
| id | Name | | --- | ---- | | 1 | A:4,5 | | 1 | B:8 | | 2 | C:9 |
最後に、GROUP_CONCAT() を最も外側のクエリに再度適用します。今回はグループ化基準として ID を使用します。このステップでは、サブクエリの Name 値をコンマで区切って連結します:
select id, group_concat(`Name` separator ',') as `ColumnName` from ( select id, concat(`Name`, ':', group_concat(`Value` separator ',')) as Name from mytbl group by id, Name ) tbl group by id;
結果は希望どおりになります:
| id | Column | | --- | ----- | | 1 | A:4,5,B:8 |
以上がMySQL で複雑なデータ集約のために GROUP_CONCAT と CONCAT を組み合わせる方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。