GROUP_CONCAT関数
1つのcolumn内に、複数の値を連結して入れたい時に使う
1つのセルに複数の値が入るので、データとしては扱いづらいが、「ただ、一覧したい」時などに有用mrsekut.icon
こんな2つのtableがあるとき
table:a
id name
1 hoge
2 piyo
table:b
id aid name
1 1 TypeScript
2 1 Haskell
3 1 PureScript
4 2 JavaScript
5 2 PHP
6 2 Java
7 2 Java
code:sql
SELECT
a.id,
GROUP_CONCAT(b.name) as name
FROM a
LEFT JOIN b on a.id = b.aid
GROUP BY a.id
table:result
id name
1 TypeScript,Haskell,PureScript
2 JavaScript,PHP,Java,Java
ポイントは、GROUP BY a.idと、GROUP_CONCAT(b.name)
GROUP BYで、どこでgroupにするかを指定し、
GROUP_CONCATで、どのcolumnを連結するかを指定する
区切り文字を替える
SEPARATORを指定する
GROUP_CONCAT(b.name SEPARATOR '/') as nameとする
table:result
id name
1 TypeScript/Haskell/PureScript
2 PHP/Java/JavaScript/Java
sortする
ORDER BYが使える
GROUP_CONCAT(b.name ORDER BY b.name) as name
table:result
id name
1 Haskell,PureScript,TypeScript ←sortされている
2 Java,Java,JavaScript,PHP ←sortされている
重複を除く
GROUP_CONCAT(DISTINCT(b.name)) as nameとする
table:result
id name
1 Haskell,PureScript,TypeScript
2 Java,JavaScript,PHP ←Javaの重複が消えている
usecases
GROUP_CONCATの普通の使い方