如何识别引用相同元素的最常见类别?

时间:2014-04-17 14:19:10

标签: sql algorithm postgresql math

我有两个关系:Location(category,item)Item(item)

每个都可以在多个类别下列出。

可以使用哪种SQL查询来确定Location(category,item)中哪两个类别最常包含相同的项目?

注意:我正在寻找一个SQL语句,但我将此问题标记为算法/数学,因为我愿意接受算法形式的解决方案,以防无法提供SQL查询。 / em>的

1 个答案:

答案 0 :(得分:1)

您可以使用joingroup 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