PL/SQLのLISTAGG関数の使用方法


  1. 基本的な使用方法: LISTAGG関数は以下のような構文を持ちます。
LISTAGG(column_name, delimiter) WITHIN GROUP (ORDER BY order_column) AS alias
  • column_name: 結合する列の名前
  • delimiter: 列間の区切り文字
  • order_column: 結果の順序を指定する列
  • alias: 結果のカラム名

以下の例では、employeesテーブルから部署ごとに従業員の名前をカンマで結合した文字列を取得します。

SELECT department_id, LISTAGG(employee_name, ',') WITHIN GROUP (ORDER BY employee_name) AS employees_list
FROM employees
GROUP BY department_id;
  1. DISTINCTキーワードの使用: LISTAGG関数には、重複した値を除外するためのDISTINCTキーワードも指定できます。以下の例では、部署ごとに重複のない従業員の名前を結合します。
SELECT department_id, LISTAGG(DISTINCT employee_name, ',') WITHIN GROUP (ORDER BY employee_name) AS employees_list
FROM employees
GROUP BY department_id;
  1. 列幅の制限: LISTAGG関数の結果の文字列長はデフォルトで4000文字に制限されています。これを超える場合は、LISTAGG関数の第三引数で制限を指定することができます。以下の例では、最大長を100文字に制限しています。
SELECT department_id, LISTAGG(employee_name, ',') WITHIN GROUP (ORDER BY employee_name) AS employees_list
FROM employees
GROUP BY department_id
LISTAGG_MAX_LEN(100);

以上が、PL/SQLのLISTAGG関数の使用方法とコード例です。これにより、複数の行を効果的に結合して文字列を作成することができます。