gpt4 book ai didi

java - 什么是删除重复项的好方法?

转载 作者:行者123 更新时间:2023-11-30 10:06:29 26 4
gpt4 key购买 nike

我有一个 varchar 列。它包含以分号 (;) 分隔的值。

例如,它看起来像

10;20;21;17;20;21;22;

并不总是 7 个元素。它可以包含大约 30 到 70 之间的任何值。他们之所以这样设计,是因为这些值实际上是基因组片段,并且一起输入或检索它是有意义的

我需要删除具有重复列的记录,因此如果我看到另一条记录具有与上述相同的值,我需要将其删除。

如果记录在另一条记录中包含相同的值,我还需要删除该记录。例如,我需要删除

10;;21;17;20;21;22;

因为它与第一个相同,但没有第二个值 20。如果它比第一个更完整,我将删除第一个。

1;2;3;4;5;6;7;1;2;3;4;5;6;7;8; 是重复的我选择了第二个,因为它更完整。 1;2;3;4;5;6;;7 也是重复的。在这种情况下,如果它们有 13 个或更多匹配数字且没有不匹配,我们将合并它们,使其成为单个值 1;2;3;4;5;6;7;7;

我可以在 java 中扫描每条记录,但考虑到该表包含数百万条记录,我担心这会很复杂且耗时。我想知道它在 oracle 本身是否可行。

我的最终目标是计算这些数字出现的频率。例如,如果数字 10 在 100 次中出现 5 次,则为 5%。计算会很简单。但是,除非我首先确保表中没有重复项,否则我无法计算这个值。

最佳答案

注意:这个答案是一个占位符,因为这个问题看起来有结束的危险,但我认为一旦所有规则都建立起来,它就值得一个答案。


删除完全相同的重复项很简单:

delete from your_table y
where y.rowid not in ( select min(x.rowid)
from your_table x
group by x.genome_string)

困难的部分是建立具有精确匹配和空值的复制字符串。合并行使逻辑更加复杂。

关于java - 什么是删除重复项的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54644536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com