LISTAGG 去重处理


ORACLE 11gr 以上WM_CONCAT失效,无奈使用函数 listagg

select listagg(NAME) WITHIN GROUP (ORDER BY NAME) from ENTITY;

然后发现查询的结果, 没有去重,本以为可以简单的用DISTINCT来解决, 没想到, listagg 不支持该关键字。

查了许久资料,从stackoverflow发现可以用正则来处理去重,于是尝试使用

select regexp_replace(listagg(NAME) WITHIN GROUP (ORDER BY NAME),'([^,]+)(,\1)*(,|$)', '\1\3') from ENTITY;

测试得到的结果的确是进行了去重处理。

但是,这个去重,必须建立在排序的基础上,如果listagg拼接出来的数值像

a, b, a, c

这时候,该正则就会失效。

参考链接

https://stackoverflow.com/questions/11510870/listagg-in-oracle-to-return-distinct-values/11511203#11511203


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM