LISTAGG関数について
用途
selectした結果をカンマ区切りで表示したい時など。
使い方
表A
ID | 都道府県名 |
---|---|
1 | 愛媛県 |
2 | 島根県 |
3 | 北海道 |
表B
ID | ゆるキャラ名 | ソート |
---|---|---|
1 | バリィさん | 1 |
1 | みきゃん | 2 |
2 | しまねっこ | 1 |
3 | キュンちゃん | 1 |
3 | アックマ | 2 |
3 | コアックマ | 3 |
上記2つの表をID列で結合して、ゆるキャラ名をカンマ区切りで
表示したいとき
yuruchara.sql
select
tab.id,
tab.pref,
listagg(tab.yuruc,',') within group (order by tab.sort_key asc ) yuruc_names
from (
select
a.ID id,
a.都道府県名 pref,
b.ゆるキャラ名 yuruc,
b.ソート sort_key
from
表A a
left join
表B b
on a.ID = b.ID ) tab
group by tab.id,tab.pref
order by tab.id;
結果はこうなります。
id | pref | yuruc_names |
---|---|---|
1 | 愛媛県 | バリィさん,みきゃん |
2 | 島根県 | しまねっこ |
3 | 北海道 | キュンちゃん,アックマ,コアックマ |
ひとこと
listaggのあとのwithin groupは省略できないので、カンマ区切りで表示する値が
ソートキーをもたないとき、
yuruchara_nosort.sql
select
tab.id,
tab.pref,
listagg(tab.yuruc,',') within group (order by null) yuruc_names
(以下続く)
と記載しておく。
SQLの改行がいけてないのはおいおい・・・(´・ω・`)