2013-08-21 29 views
1

我有一個數據庫數據不佳的形狀。我正在尋找一種方法來將列中的值集合降至最低,而不會丟棄信息。如何在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 
... 

我想找到那個能告訴我朝向數據匯聚組查詢(和幫助我做出明智的選擇有關FOO FOO < - >FOO.FOO和自動化FOO DOO - >FOO FOOFOO.FOO

該數據庫是Oracle 10g。我知道UTL_MATCH.EDIT_DISTANCEUTL_MATCH.JARO_WINKLER的功能,但在這種情況下,我無法用頭包住它。以前的GROUP BY查詢應該在10000行以下。

+0

你知道你想用什麼算法?你知道你的數據的領域,我們不知道,所以你知道可以做什麼改變而不會丟掉信息。總的來說,這種事情非常困難。例如,如果您想要說,您將任何小於或等於2個字符的值更改爲遠離另一個更頻繁發生的值,則可以這樣做。但是,如果需要確定性結果,則必須指定彙總發生的順序。你必須決定彙總是否可以級聯。 –

+0

有一些機器學習算法可以讓計算機嘗試創建具有相似值的不同「桶」。這些可能比我上面討論的簡單算法更強大,但也可能需要更多的工作來實現並理解如何適當地設置所有參數。在讓系統自動開始合併值之前,任何算法都可能需要手動檢查結果。 –

+2

看起來您需要創建一些中間數據結構,您可以在其中將描述鏈接到您的密鑰。一旦你滿意,你可以繼續並用獨特的值填充你的實時表格。 –

回答

0

主要問題是定義什麼是「相似」。你需要指定一個決定性的方式來說明兩個字符串是否相似。

想想創建一個函數MyFanceAreSimilarFunction(string1,string2),你應該填寫。如果你知道如何檢查它們是否相似,你就可以編寫它:)。之後只是將其添加到where子句中。

另外,看看SOUNDEX

相關問題