【PostgreSQL 】string_aggとgroup byで文字列を連結してグループ化する方法

実行環境

■PostgreSQL 12.3
■pgAdmin4

 

string_aggとは

string_aggとは、集約関数の1つで非NULLの入力値が指定したデリミタで区切られた一つの文字列に連結されます

■公式ドキュメント
https://www.postgresql.jp/document/12/html/functions-aggregate.html

つまり、デリミタ(カンマやスペース)を使って複数行を1つの文字列にすることができます。

string_agg(expressiondelimiter)

引数のデータ型は、(text, text)または(bytea, bytea)となります。

 

string_aggとgroup byで文字列を連結してグループ化する

下記のuserテーブルを用いてユーザーを都道府県ごとにグループ化して文字列で連結していきます。

サンプルコード

SELECT hometown, 
       string_agg(name, ',') AS user_list -- nameカラムをデリミタ(カンマ)で連結して別名(user_list)にする
FROM public.user
GROUP BY hometown;

実行結果:

ユーザーを都道府県ごとにグループ化して文字列で連結することができました。

実際の開発現場でも「string_agg」の使用頻度は比較的高いです。

 

おすすめ書籍・Udemy

■おすすめ入門書①
スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)

■おすすめ入門書②
いちばんやさしい SQL 入門教室

■おすすめ入門書③
ゼロからわかる SQL超入門 (かんたんIT基礎講座)

 

■Udemyのおすすめ講座①
はじめてのテーブル設計・データベース設計

■Udemyのおすすめ講座②
3時間で学ぶ SQL ・データベース 超入門

■Udemyのおすすめ講座③
はじめてのSQL ・データ分析入門