我有两个关系:Location(category,item)
和Item(item)
每个项都可以在多个类别下列出。
可以使用哪种SQL查询来确定Location(category,item)
中哪两个类别最常包含相同的项目?
注意:我正在寻找一个SQL语句,但我将此问题标记为算法/数学,因为我愿意接受算法形式的解决方案,以防无法提供SQL查询。 / em>的
答案 0 :(得分:1)
您可以使用join
和group by
在SQL中轻松完成此操作。在location
上将item
表加入自身,然后计算匹配数。按顺序排序并选择第一个,如果你想要匹配最多的那对:
select l1.category, l2.category, count(*) as cnt
from location l1 join
location l2
on l1.item = l2.item and
l1.category < l2.category
group by l1.category, l2.category
order by count(*) desc
limit 1;
请注意,这假定category, item
中的location
是唯一的。否则,您可以使用此select
:
select l1.category, l2.category, count(distinct l1.item) as cnt