LoginSignup
3
3

More than 5 years have passed since last update.

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の改行がいけてないのはおいおい・・・(´・ω・`)

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3