今日份知识学习
今天接着昨天的文章来说,跟昨天我们要说的需求不太一样,今天主要来说如何组合去重,一起来讨论一下解决方案,学习一下吧。
具体讲解
我们经常会遇到针对一些组合数据进行去重的开发需求,比如这样的数据,user_table表中的有重复name,我们要将这些数据进行合并,并且进行去重操作。
首先,我们没有必要再拆分了,在之前文章中我们已经讲过如何拆分字符串数据了,本次就不再赘述了。
直接就按照顺序合并name字段吧。
看一下下面的SQL示例:
select listagg(name) with group(order by age) from user_table connect by level <= (select count(*) from user_table)
如此我们就得到了一个合并后的字符串。
去重
去重的操作有很多,今天就说一个笨方法,那就是先去重再进行组合操作。
select distinct name from user_table
完善之前已经写过的SQL:
select listagg(name) with group(order by name) from user_table connect by level <= (select count(*) from (select distinct name from user_table))
如此,得到的结果集也就不存在重复结果了。
其实还有另外一种方式,那就是wm_concat和distinct组合后的结果。
wm_concat 加 distinct
通过wm_concat函数加上distinct关键字进行聚合去重。
select wm_concat(distinct name) from user_table group by name
通过这个SQL,我们就可以得到一个去重的组合字符串了。
之前文章中就说过,wm_concat因为oracle版本的不同,返回的数据类型会不同,所以大家在用的时候要多试试。
总结
今天我们学习了如何对拆分的字符进行组合去重,在书写复杂SQL时常遇到的问题,在这篇文章中你学会了吗?
最近开始来学习Oracle数据库的一些知识,其中包含一些函数的使用,或者是特性的介绍讲解等,将会在系列文章内说到。
喜欢的可以关注一下专栏。