oracle中 listagg() WITHIN GROUP () 行轉列函數的使用


listagg() :   Oracle的列轉行函數(1oracle11.2 以上版本.)

語法: 

listagg(id, ',') within group(order by serno)

listagg(列名,' 分割符號') within group(order by 列值被拼接的順序)

1.使用條件查詢 查詢部門為20的員工列

 

 

  2.使用  listagg() WITHIN GROUP ()  將多行合並成一行(比較常用)

 

 3. 使用 listagg() within GROUP () over  將多行記錄在一行顯示(沒有遇到過這種使用場景)

 

 二、同 wm_concat() 函數的區別:

使用 wm_concat 函數,記得加上to_char. 不然會展現成 CLOB 字段.

個人建議: 11g 版本后使用 listagg 函數. 之前版本使用 wm_concat 函數.

三、group by和partition by 的區別

group by 后的列必須是查詢的分組全部列.

partition by 查出的結果集是重復的,需要使用 distinct 進行顯式去重.

對於查詢結果非常復雜的業務場景,個人感覺使用 PARTITION BY 會更靈活一些;GROUP BY 由於其查詢結果列必須出現在 GROUP BY 條件里邊而顯得有些臃腫,不夠優雅。partition by 可以理解為以什么來分區.

 

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM