オーロラさんの勉強帳

SESのロースキル客先常駐勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。

【SQL】LISTAGG関数 (ORACLE DATABASE 12C SQL基礎)

ORACLE DATABASE 12c SQL基礎(1Z0-061)の試験範囲でもある、
LISTAGG(リスタッグ)関数の使用方法を紹介します。


目次

LISTAGG(リスタッグ)関数とは

LISTAGG関数を使うと、指定した列の複数行の値を連結して1行にまとめることができます。
デリミタ(区切り記号)を指定することで、カンマ区切りなどでまとめることが可能です。
戻り値は文字型です。

LISTAGG関数の書式

LISTAGG(連結したい列, 'デリミタ') WITHIN GROUP (ORDER BY 連結順の基準列)

引数 説明
連結したい列 連結にしたい列名を指定します。
デリミタ 連結にする際の区切り記号を指定します。
連結順の基準列 連結するときの順番を決める基準列を指定します。


LISTAGG関数では、指定した列の複数行の値をORDER BYで指定した基準で並び替えて、連結します。


LISTAGG関数の使用例

以下のテーブルを使って「LIATAGG関数」の動作を確認してみましょう。

f:id:auroralights:20210629230739p:plain



NAME列の値をID列の順番で連結するSQLを試してみましょう。

SELECT LISTAGG(NAME,',') WITHIN GROUP (ORDER BY ID)
FROM TEST6;

SQLの結果
f:id:auroralights:20210629230914p:plain



NAME列の値をDEPARTMENT_ID列の順番で連結するSQLを試してみましょう。

SELECT LISTAGG(NAME,',') WITHIN GROUP (ORDER BY DEPARTMENT_ID)
FROM TEST6;

SQLの結果
f:id:auroralights:20210629231035p:plain



COUNTRY_CDごとのNAME列の値を連結するSQLを試してみましょう。

SELECT LISTAGG(NAME,',') WITHIN GROUP (ORDER BY ID)
FROM TEST6
GROUP BY COUNTRY_CD;

SQLの結果
f:id:auroralights:20210629231611p:plain

SELECT COUNTRY_CD,LISTAGG(NAME,',') WITHIN GROUP (ORDER BY ID)
FROM TEST6
GROUP BY COUNTRY_CD;

SQLの結果
f:id:auroralights:20210629231743p:plain