1. ホーム
  2. mysql

[解決済み] MySQLのCONCATでGROUP_CONCATを使用する方法

2022-03-09 09:20:01

質問

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 . しかし、私はそれがどのように動作するのかよく分からない。

どのように解決するのですか?

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;

ここで実装を見ることができます : Sql Fiddleデモ . まさに必要なもの。

更新情報 2つのステップで分割します。まず、一意な[Name,id]に対してすべての値(カンマ区切り)を持つテーブルを取得します。次に、得られたテーブルから、一意なidに対して、すべての名前と値を1つの値として取得します。 この説明はこちら SQLフィドルデモ (結果セットが2つあるので下にスクロールしてください)

編集 質問を読んでいて、idだけでグループ化していたのは間違いでした。しかし、(値が名前とidでグループ化され、idで全体化される)場合、2つのgroup_contactsが必要です。 前回の回答は

select 
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id

ここで実装を見ることができます : SQL Fiddleデモ