Sql 如何在Oracle中找到类似的值?
我有一个数据库,数据状态很差。我正在寻找一种方法,将列中的值集减少到最小值,而不丢弃信息 例如:Sql 如何在Oracle中找到类似的值?,sql,database,oracle,Sql,Database,Oracle,我有一个数据库,数据状态很差。我正在寻找一种方法,将列中的值集减少到最小值,而不丢弃信息 例如: SELECT VALUE, COUNT(*) FROM TABLE GROUP BY VALUE; VALUE |COUNT(*) FOO FOO |50000 FOO.FOO |40000 FOO DOO |40 BAR BAR |60000 BAR.BAR |45000 BAR BAZ |30 ... 我想找到一个查询,它可以向我显示数据聚合的组(并帮助我对F
SELECT VALUE, COUNT(*) FROM TABLE GROUP BY VALUE;
VALUE |COUNT(*)
FOO FOO |50000
FOO.FOO |40000
FOO DOO |40
BAR BAR |60000
BAR.BAR |45000
BAR BAZ |30
...
我想找到一个查询,它可以向我显示数据聚合的组(并帮助我对FOO-FOO
FOO.FOO
做出明智的选择,并自动执行FOO-DOO
->FOO-FOO
或FOO.FOO
)
数据库是oracle10g。我知道
UTL\u MATCH.EDIT\u DISTANCE
和UTL\u MATCH.JARO\u WINKLER
函数,但在这种情况下,我无法使用它们。前面的groupby
查询应该在10000行以下。主要问题是定义什么是“相似”。您需要指定一种确定的方式来说明两个字符串是否相似
考虑创建一个应该填充的函数MyFanceAreSimilarFunction(string1,string2)
。如果您知道如何检查它们是否相似,则可以编写代码:)。之后只是将其添加到where子句中
另外,看看您知道要使用什么算法吗?您知道数据的域,我们不知道,因此您知道可以在不丢弃信息的情况下进行哪些更改。一般来说,这类事情非常困难。例如,如果您想说,您可以将任何值从另一个更频繁出现的值中减去2个或更少的单个字符更改,您可以这样做。但是,如果希望得到确定性结果,则必须指定汇总的顺序。你必须决定汇总是否可以级联。有一些机器学习算法允许计算机尝试创建具有相似值的不同“桶”。这些可能比我上面讨论的简单算法更健壮,但也可能需要更多的工作来实现和理解如何适当地设置所有参数。任何算法都可能需要在系统开始自动组合值之前对结果进行一些手动检查。看起来您需要创建一些中间数据结构,以便将描述链接到键。一旦您感到满意,就可以继续使用唯一的值填充live表。