あれどうやって書くんだっけとなったのでメモ
この記事が前提とする環境
PostgreSQL 9.0以上
やりたいこと
従業員を表すテーブルemployees
があるとする。
employee_id | department_id | employee_name |
---|---|---|
1 | 1 | 佐藤 |
2 | 1 | 鈴木 |
3 | 1 | 高橋 |
4 | 2 | 田中 |
5 | 2 | 伊藤 |
このとき、部門ごとに、その部門に所属している従業員の一覧を/区切りで出力したい。
出力の一貫性を保つために従業員の順番はemployee_id順とする。
department_id | employee_names |
---|---|
1 | 佐藤/鈴木/高橋 |
2 | 田中/伊藤 |
コード
SELECT
department_id,
string_agg(employee_name, '/' ORDER BY employee_id) AS employee_names
FROM
employees
GROUP BY
department_id
ORDER BY
department_id;
参考リンク
postgresql - How to get result from string_agg() with a proper order by - Stack Overflow