App下載

在 Oracle 中的多個(gè)連接表上使用 LISTAGG()

智慧女孩不禿頭 2021-09-07 11:11:40 瀏覽數(shù) (3030)
反饋

你可能知道如何在單個(gè)表上使用 LISTAGG(),但不知道如何在多個(gè)連接表上使用 LISTAGG。此示例演示如何在 Oracle 12g 中對(duì)連接的多個(gè)表使用聚合函數(shù)。

假設(shè)我們有以下兩個(gè)表。

“用戶(hù)”表

ID姓名
111aaa
222bbb
333bbb

“記錄”表

ID標(biāo)簽價(jià)值
111start1
111mid2
111end3
222start1
222end2
333start1
333mid2
333start3

如果我們要選擇所有標(biāo)有“start”和“end”的值,如下圖,sql查詢(xún)?cè)趺磳?xiě)?

預(yù)期結(jié)果:

ID姓名聚合值
111aaa1,3
222bbb1,2
333bbb1,3

select u.ID, u.Name, listagg(Value, ', ') within group (order by Tag) as AggValues from User u left outer join Record r on u.ID = r.ID and r.Tag in ('start', 'end') group by u.ID, u.Name;

一個(gè)常見(jiàn)的錯(cuò)誤是缺少最后一個(gè) ?group by? 子句中的字段。每個(gè)選擇字段也應(yīng)該在 ?group by? 子句中。在本例中,我們選擇 ?select? ID 和 Name,因此應(yīng)該使用 ID 和 Name 對(duì)結(jié)果進(jìn)行分組。


0 人點(diǎn)贊