Edited at

GROUP_CONCATでグルーピングした値をCONCAT

More than 3 years have passed since last update.

GROUP_CONCATという便利な集約関数がMySQLにあって色々使えそうなので共有します。

例えばこんな感じテーブルshop_areaテーブルがあったとします。

shop_id
area_id

1
21

1
3

2
14

2
15

3
33

で、これをshop_idでGROUP BYして下記のようなデータをSQL一発で取得可能です。

shop_id
area_list

1
21/3

2
14/15

3
33

SQLはこんな感じ

SELECT shop_id, GROUP_CONCAT(area_id separator '/') as area_list 

FROM shop_area
GROUP BY shop_id;

area_idが重複するような場合はGROUP_CONCAT(DISTINCT area_id separator '/')のように、DISTINCTキーワードも使えます。