よし、製品 ID と属性 ID の 2 つのキーを格納するリレーションがあります。特定の製品に最も類似している製品を特定したい。(属性は実際には数値ですが、例がわかりにくくなるため、視覚的な表現を単純化するために文字に変更されています。)
Prod_att
Product | Attributes
1 | A
1 | B
1 | C
2 | A
2 | B
2 | D
3 | A
3 | E
4 | A
最初はこれはかなり単純に思えます。製品が持つ属性を選択し、製品ごとに共有されている属性の数を数えるだけです。この結果は、製品が持つ属性の数と比較され、2 つの製品がどれほど似ているかがわかります。これは、比較対象の製品に比べて多数の属性を持つ製品には機能しますが、製品の属性が非常に少ない場合に問題が発生します。たとえば、製品 3 は他のほぼすべての製品と同数になります (A は非常に一般的であるため)。
SELECT Product, count(Attributes)
FROM Prod_att
WHERE Attributes IN
(SELECT Attributes
FROM prod_att
WHERE Product = 1)
GROUP BY Product
;
これを修正する方法や現在のクエリの改善に関する提案はありますか?
ありがとう!
*編集: 製品 4 は、すべての製品に対して count() =1 を返します。製品 3 は異なる属性が少ないため、より類似していることを示したいと思います。