listagg函數的用法

listagg函數的用法

listagg函數的用法

這是一個oracle的列轉行函數:LISTAGG()

?

先看示例代碼:

sql代碼?

with?temp?as(?? ??select?'China'?nation?,'Guangzhou'?city?from?dual?union?all?? ??select?'China'?nation?,'Shanghai'?city?from?dual?union?all?? ??select?'China'?nation?,'Beijing'?city?from?dual?union?all?? ??select?'USA'?nation?,'New?York'?city?from?dual?union?all?? ??select?'USA'?nation?,'Bostom'?city?from?dual?union?all?? ??select?'Japan'?nation?,'Tokyo'?city?from?dual??? )?? select?nation,listagg(city,',')?within?GROUP?(order?by?city)?? from?temp?? group?by?nation

?這是最基礎的用法:

LISTAGG(XXX,XXX)?WITHIN?GROUP(?ORDER?BY?XXX)

?

用法就像聚合函數一樣,通過Group by語句,把每個Group的一個字段,拼接起來。

非常方便。

?

同樣是聚合函數,還有一個高級用法:

就是over(partition by XXX)

也就是說,在你不實用Group by語句時候,也可以使用LISTAGG函數:

Sql代碼??

with?temp?as(?? ??select?500?population,?'China'?nation?,'Guangzhou'?city?from?dual?union?all?? ??select?1500?population,?'China'?nation?,'Shanghai'?city?from?dual?union?all?? ??select?500?population,?'China'?nation?,'Beijing'?city?from?dual?union?all?? ??select?1000?population,?'USA'?nation?,'New?York'?city?from?dual?union?all?? ??select?500?population,?'USA'?nation?,'Bostom'?city?from?dual?union?all?? ??select?500?population,?'Japan'?nation?,'Tokyo'?city?from?dual??? )?? select?population,?? ???????nation,?? ???????city,?? ???????listagg(city,',')?within?GROUP?(order?by?city)?over?(partition?by?nation)?rank?? from?temp

?

總結:LISTAGG()把它當作SUM()函數來使用就可以了。

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享