タイガーラック クリエイティブブログ
2024
October
17

グループ化したカラムを1行にまとめる方法

注文毎に買った商品をまとめたいとか、
特定の日に予約してる人をまとめて表示したいという場合があると思います。
そんな時に使える関数「string_agg」を紹介します。

※この記事はPostgreSQL 13.5 で動作確認してます。

string_agg とは

GROUP BY句内で使えるデリミタで区切られた一つの文字列に連結する機能になります。

注文テーブル

注文ID商品名個数
Aりんご2
Aぶどう3
Bみかん1
Cりんご6
Cみかん3
Cなし2

SQL

SELECT 注文ID , string_agg(商品名,'/') AS 商品名
GROUP BY 注文ID
ORDER BY 注文ID

出力結果

注文ID商品名
Aりんご/ぶどう
Bみかん
Cりんご/みかん/なし

グループ化されて、商品名も1行にまとめられました!

注意事項

text型、もしくはbytea型しか対応してないので数値や日付は対応していません。
そのため、数値や日付を出力したい場合はTO_CHAR関数でtext型に変換する必要があるので注意です。

補足

SELECT 注文ID , string_agg(商品名,'/' ORDER BY 商品名) AS 商品名
GROUP BY 注文ID
ORDER BY 注文ID

上記のようにstring_agg内でソートも追加可能です。
GROUP BYで指定しているカラムのみという指定もないので好きなソートが可能です。

まとめ

GROUP BYで集約した中身を見たいと思った時に便利な関数になります。
通常通り表示させたい場合ももちろん使えますが、テストで正しくグループ化されているかの出力確認に使うこともできます。

このカテゴリの最新記事

関連記事

SHOP LIST

タイガーラック株式会社

〒577-0056
大阪府東大阪市長堂1-3-14 TOKUYASU Bld.