LISTAGG 去重处理

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

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

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

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

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

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

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

a, b, a, c

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

参考链接

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

上一篇:[6 kyu] Highest Scoring Word


下一篇:php – 将“流行度”因素与zend-search lucene正确集成的最佳方法是什么?