其他分享
首页 > 其他分享> > LISTAGG 去重处理

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

标签:LISTAGG,listagg,NAME,处理,WITHIN,GROUP,ORDER,select
来源: https://www.cnblogs.com/never-gu/p/13262821.html