MySQL/縦持ちデータを横持ちにする

MySQL/縦持ちデータを横持ちにする

よくやりたいやつ。データ的には本質じゃない付加情報として欲しいんだけど、それ結合しちゃうとレコード増えてしまうし困ったなというやつ。

ここで MySQL には非常に便利な GROUP_CONCAT という集計関数があってグループ化された複数レコードのフィールドを1個の値としてガッチャンコしてくれるのである

SELECT
   team_id,
   GROUP_CONCAT(name SEPARATOR ',')
FROM
   hoge
GROUP BY
   team_id

このようなこれでこのようなレコードが取れる

1 tanaka,yamada,ito
2 takahashi,kitamura,yamamoto

大体においてこのような付加情報はレコード数が少ない、しかも普通に使うときは ORマッパー を使って class にマッピングされることが多い。

つまり class 側でこのガッチャンコを分解して自前でマッピングしてやれば十分事足りるのである。

さらにこいつには便利な機能が備わっていて、

GROUP_CONCAT(DISTINCT name ORDER BY name ASC SEPARATOR ',')

このように、重複値の排除と順番指定もできるようになっている。

データベース操作の本質から外れる部分があるとは思うが便利すぎるので多用してしまいそうである。

Tag

db/mysql/transform_vertical_data_into_horizontal_data.txt · 最終更新: 2018-03-13 09:55 by ore