假設我有這樣一個數據表:使用記分找到最佳匹配在SQL
ID | Col1 | Col2 | Col3
1 a b 23
2 a c 14
3 f g 11
假設我有一個POSSIBLE_MATCHES表所示:
MatchID | Col1 | Col2 | Col3
101 a a 11
102 a b 11
103 a b 14
104 a c 23
105 f a 1
假設我有一個權係數表像(如果你想爲了這個討論和簡單的假設所有的權重是1 - 我可以在稍後提出我的解決方案以合併重量):
Col | Weight
Col1 1
Col2 1.5
Col3 2
因此,對於每個可能的匹配,我們將計算每個匹配列上的SCORE。
Score = Col1 Weight * (CASE WHEN DATA.COL1 = POSSIBLE_MATCHES.Col1 THEN 1 ELSE 0) +
Col2 Weight * (CASE WHEN DATA.COL2 = POSSIBLE_MATCHES.Col2 THEN 1 ELSE 0) +
Col3 Weight * (CASE WHEN DATA.COL3 = POSSIBLE_MATCHES.Col3 THEN 1 ELSE 0)
因此,例如最佳匹配用於第一行:Col1中= A,Col2中= B,COL3 = 23:
MatchID | Col1 | Col2 | Col3 | Score
101 a a 11 1*1 + 1.5*0 + 2*0 = 1
102 a b 11 1*1 + 1.5*1 + 2*0 = 2.5
103 a b 14 1*1 + 1.5*1 + 2*0 = 2.5
104 a c 23 1*1 + 1.5*0 + 2*1 = 3
105 f a 1 1*0 + 1.5*0 + 2*0 = 0
因此,在這種情況下爲ID的最佳匹配: 1是MatchID:104。如果分數相同,則採用最低的MatchID。
這裏有一個SQL小提琴,如果你想玩弄這樣的: http://sqlfiddle.com/#!6/9df45/1
對於數據的每個ID我怎麼會發現在可能的匹配最佳匹配?
最佳匹配是MatchID得分最高 – Denis 2015-04-02 14:15:48
因此,解決方案是正確加入表格,評估分數並選擇最高分數的匹配。你究竟在哪裏卡住? – 2015-04-02 14:18:07
@ThorstenKettner:是的。只需要指導一下如何做這樣的事情。 – Denis 2015-04-02 14:22:47